当前位置: 首页 > news >正文

【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 的位置,最后将新数组拷贝至原数组即可。

代码实现: 

class Solution {public void rotate(int[] nums, int k) {int len = nums.length;int[] tmp = new int[len];for(int i = 0; i < len; i++) {tmp[(i+k)%len] = nums[i];}for(int i = 0; i< len; i++) {nums[i] = tmp[i];}}
}

复杂度分析 

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

方法二:整体移动

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

 代码实现:

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

 复杂度分析 :

  • 时间复杂度: 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,即为答案。 

 代码实现:

class Solution {public int maxSubArray(int[] nums) {int maxSum = nums[0];int sum = 0;for(int x : nums) {if(sum >= 0) {sum += x;}else{    //贪心思想:如果之前的和小于0,则丢弃之前的和,再重新计算和sum = 0;sum += x;}maxSum = Math.max(maxSum,sum);}return maxSum;}
}

复杂度分析:

  • 时间复杂度: 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 

 

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

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

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

 

相关文章:

  • C++-类与对象(上)
  • Vue学习之样式汇总
  • 什么是React中的高阶组件(Higher Order Component,HOC)?它的作用是什么?
  • Vue引入异步组件
  • C#列表List的创建与使用
  • 阿里蚂蚁淘宝等多次一面面试面经
  • AM@积分上限的函数及其导数@微积分第一基本定理@原函数存在定理
  • Qt配置OpenCV教程,亲测已试过
  • 一键添加命名前缀(文件)
  • 自动驾驶的未来展望和挑战
  • liunx Centos-7.5上 rabbitmq安装
  • c++ qt连接操作sqlite
  • C++深度优先(DFS)算法的应用:收集所有金币可获得的最大积分
  • 算法随想录算法训练营第四十六天| 583. 两个字符串的删除操作 72. 编辑距离
  • 阿里云企业邮箱基于Spring Boot快速实现发送邮件功能
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • [笔记] php常见简单功能及函数
  • Cumulo 的 ClojureScript 模块已经成型
  • FineReport中如何实现自动滚屏效果
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JavaScript学习总结——原型
  • mongo索引构建
  • PHP 7 修改了什么呢 -- 2
  • Solarized Scheme
  • vue中实现单选
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 少走弯路,给Java 1~5 年程序员的建议
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 学习Vue.js的五个小例子
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • !!java web学习笔记(一到五)
  • #、%和$符号在OGNL表达式中经常出现
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • $NOIp2018$劝退记
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (BFS)hdoj2377-Bus Pass
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (分布式缓存)Redis分片集群
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (六)Hibernate的二级缓存
  • (南京观海微电子)——COF介绍
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (原創) 未来三学期想要修的课 (日記)
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • /boot 内存空间不够