码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【LeetCode力扣】189 53 轮转数组 | 最大子数组和


    目录

    1、189. 轮转数组

    1.1、题目介绍

    1.2、解题思路

    2、53. 最大子数组和

    2.1、题目介绍

    2.2、解题思路


     

    1、189. 轮转数组

    1.1、题目介绍

    原题链接:189. 轮转数组 - 力扣(LeetCode)

    ​

    示例 1:

    输入: nums = [1,2,3,4,5,6,7], k = 3
    输出: [5,6,7,1,2,3,4]
    解释:
    向右轮转 1 步: [7,1,2,3,4,5,6]
    向右轮转 2 步: [6,7,1,2,3,4,5]
    向右轮转 3 步: [5,6,7,1,2,3,4]

    示例 2:

    输入:nums = [-1,-100,3,99], k = 2
    输出:[3,99,-1,-100]
    解释: 
    向右轮转 1 步: [99,-1,-100,3]
    向右轮转 2 步: [3,99,-1,-100]

    提示: 

    • 1 <= nums.length <= 10^5
    • -2^31 <= nums[ i ] <= (2^31)-1
    • 0 <= k <= 10^5

    1.2、解题思路

    方法一: 使用额外的数组

    我们可以使用额外的数组来将每个元素放至正确的位置。用 len 表示数组的长度,我们遍历原数组,将原数组下标为 i 的元素放至新数组下标为  (i+k) % len 的位置,最后将新数组拷贝至原数组即可。

    代码实现: 

    1. class Solution {
    2. public void rotate(int[] nums, int k) {
    3. int len = nums.length;
    4. int[] tmp = new int[len];
    5. for(int i = 0; i < len; i++) {
    6. tmp[(i+k)%len] = nums[i];
    7. }
    8. for(int i = 0; i< len; i++) {
    9. nums[i] = tmp[i];
    10. }
    11. }
    12. }

    复杂度分析 

    • 时间复杂度: O(n),其中 n 为数组的长度。
    • 空间复杂度: O(n)。

    方法二:整体移动

    k = 3 就相当于最右边的3个数整体移到了最左边。

    ​

    ​

    ​

     代码实现:

    1. class Solution {
    2. public void rotate(int[] nums, int k) {
    3. int len = nums.length;
    4. int[] tmp = new int[k];
    5. k = k % len; //旋转一周等于原来数组,因此首先需要就行k%len操作
    6. for(int i = len - k, index = 0; i < len; i++,index++) { //使用tmp数组保存需要旋转的元素
    7. tmp[index] = nums[i];
    8. }
    9. for(int i = len - 1 - k; i >= 0; i--) { //将不需要旋转的元素整体向后移动
    10. nums[i + k] = nums[i];
    11. }
    12. for(int i = 0; i < k; i++) { //将旋转的元素依次放到最前面
    13. nums[i] = tmp[i];
    14. }
    15. }
    16. }

     复杂度分析 :

    • 时间复杂度: O(n),其中 n 为数组的长度。
    • 空间复杂度: O(1),因为只用到了有限空间k。

    2、53. 最大子数组和

    2.1、题目介绍

    原题链接:53. 最大子数组和 - 力扣(LeetCode)

    示例 1:

    输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
    输出:6
    解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。

    示例 2:

    输入:nums = [1]
    输出:1

     示例 3:

    输入:nums = [5,4,-1,7,8]
    输出:23

    提示: 

    • 1 <= nums.length <= 105
    • -104 <= nums[ i ] <= 104

    2.2、解题思路

    贪心算法:

    从头开始对数组进行累加和,当之前的和小于0时,则丢弃之前的和,即将和设为0,再继续结算和,然后和依然小于0,则继续丢弃,同时记录每次算出的最大和。

     图解说明:

     

    按照这个规律继续执行,最后可以得出最大和为6,即为答案。 

     代码实现:

    1. class Solution {
    2. public int maxSubArray(int[] nums) {
    3. int maxSum = nums[0];
    4. int sum = 0;
    5. for(int x : nums) {
    6. if(sum >= 0) {
    7. sum += x;
    8. }else{ //贪心思想:如果之前的和小于0,则丢弃之前的和,再重新计算和
    9. sum = 0;
    10. sum += x;
    11. }
    12. maxSum = Math.max(maxSum,sum);
    13. }
    14. return maxSum;
    15. }
    16. }

    复杂度分析:

    • 时间复杂度: O(n),只遍历一次数组。
    • 空间复杂度: O(1),只使用了常数空间。

    更多【LeetCode刷题】 推荐:

    【LeetCode力扣】234 快慢指针 | 反转链表 | 还原链表-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zzzzzhxxx/article/details/133958602?spm=1001.2014.3001.5502
    【LeetCode力扣】86. 分隔链表-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zzzzzhxxx/article/details/133942678?spm=1001.2014.3001.5502

    【LeetCode力扣】297. 二叉树的序列化与反序列化-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zzzzzhxxx/article/details/133827375?spm=1001.2014.3001.5502 

     

    如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

    如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

    如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

     

  • 相关阅读:
    目标检测YOLO实战应用案例100讲-机器人路径规划与目标检测(续)
    深度学习专题交流(第11~14次课):卷积神经网络基本原理
    【效率提升】maven 转 gradle 实战
    工单提交管理H5小程序开发
    第四章字符串_反转字符串里的单词
    c++|引用
    .NET验收
    日用百货小程序商城的效果有哪些
    音视频学习 - Qt6.3.1版本下实现屏幕截图功能
    如何通过 6 种方法从 iPhone 恢复已删除的文件
  • 原文地址:https://blog.csdn.net/zzzzzhxxx/article/details/134095703
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号