leetcode题解189-旋转数组
问题描述
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
示例 1:
输入: [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:
输入: [-1,-100,3,99] 和 k = 2
输出: [3,99,-1,-100]
解释:
向右旋转 1 步: [99,-1,-100,3]
向右旋转 2 步: [3,99,-1,-100]
说明:
尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
要求使用空间复杂度为 O(1) 的 原地 算法。
解题思路1:暴力破解法
最简单的方法是旋转 k 次,每次将数组旋转 1 个元素。
代码实现1:
class Solution {public void rotate(int[] nums, int k) {int temp, previous;for (int i = 0; i < k; i++) {previous = nums[nums.length - 1];for (int j = 0; j < nums.length; j++) {temp = nums[j];nums[j] = previous;previous = temp;}}}}
解题思路2:反转数组
这个方法基于这个事实:当我们旋转数组 k 次, k%n 个尾部元素会被移动到头部,剩下的元素会被向后移动。
在这个方法中,我们首先将所有元素反转。然后反转前 k 个元素,再反转后面 n−k 个元素,就能得到想要的结果。
假设 n=7 且 k=3 。
原始数组 : 1 2 3 4 5 6 7
反转所有数字后 : 7 6 5 4 3 2 1
反转前 k 个数字后 : 5 6 7 4 3 2 1
反转后 n-k 个数字后 : 5 6 7 1 2 3 4 --> 结果
代码实现2
class Solution {public void rotate(int[] nums, int k) {if(nums.length==1 || k==0){return;}k=k%nums.length;reverse(nums,0,nums.length);reverse(nums,0,k);reverse(nums,k,nums.length);for(int i=0;i<nums.length;i++){System.out.println(nums[i]);}}public void reverse(int[] nums,int start,int end){if(end-start<=1){return ;}int mid=(end-start)/2+start;for(int i=start;i<mid;i++){int temp=nums[i];nums[i]=nums[end+start-i-1];nums[end+start-i-1]=temp;}}
}
leetcode题解189-旋转数组相关推荐
- 数组元素替换_LeetCode 题解 | 189. 旋转数组
力扣 189. 旋转数组(点击查看题目) 题目描述 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 示例 2: 说明: 尽可能想出更多的解决方案,至少有三种不同的方 ...
- LeetCode-数组-189. 旋转数组
描述 189. 旋转数组 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 进阶: 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题. 你可以使用空间复杂度为 O( ...
- 189. 旋转数组 golang
一个引出较多知识点的题 关于golang的append函数的踩坑 剑指offer-翻转字符串 557. 反转字符串中的单词 III 题目 189. 旋转数组 给定一个数组,将数组中的元素向右移动 k ...
- 每日一道 LeetCode (42):旋转数组
每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...
- leetcode 11:旋转数组的最小数字
leetcode 11:旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按 ...
- 算法题解:旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 解题思路 将旋转数组对半分可以得到一个包含最小元素的新旋转数组 ...
- LeetCode 189. 旋转数组(环形替换)
1. 题目 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向 ...
- Leetcode 189. 旋转数组 解题思路及C++实现
方法一:暴力方法 解题思路: 用栈存储后面的 k 个元素,然后将 nums 数组的元素往后挪 k 位,然后再将栈中的元素存进nums数组中. class Solution { public:void ...
- Leetcode 189. 旋转数组 (每日一题 20210909)
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数.进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题. 你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问 ...
最新文章
- LeetCode简单题之拼写单词
- PubChem分子库
- 网络接口配置-Bonding
- 黄聪:【强烈推荐】搜索引擎排名决定一切吗!
- Using SharePoint 2003 Web Services to Retrieve Data From A List
- 20200218:不同路径(leetcode62)
- Python时间序列分析指南!
- java计算机毕业设计劳务外包管理系统源码+系统+mysql数据库+lw文档
- 常见的思维模型:5W2H和2W1H
- FreeMarker模板制作
- 计算机如何使用键盘复制粘贴,电脑复制粘贴快捷键,小编教你电脑怎么用键盘复制粘贴...
- 报名啦!第四届滴滴-IEEE未来精英论坛今夏来袭
- Python爬取网易云音乐热评(附源码)
- flowable 排他网关
- 川师计算机类专业收分安徽,四川师范大学专业收分
- Bone Collector(01背包问题-两种写法)
- 闵帆老师《论文写作》心得体会
- RK3399实际解码能力测试
- 《番茄工作法图解》全书笔记
- 全球及中国SaaS(软件运营服务)市场竞争态势预测及未来发展走势分析报告2021-2027年