标题leetbook 旋转数组
第一次 写一些关于每次刷题遇到困难的题的题解,跟大家分享
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
写一个我自己知道的解法吧
当第一眼看到这道题的时候是很蒙的,但是翻阅解体思路后会豁然开朗。用这种思路会很简单,都不觉得是中等难度的题,主要还是看对基础知识的扎实度吧
输入: 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]
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2skh7/
来源:力扣(LeetCode)
本题主要是对数组的排序,最开始接触的是反转排序,这道题可以看做是三次的反转吧,我是这样理解的:
第一次反转,把数组全部反转
第二次反转,把数组从0到 k长度-1 反转
第三次反转,把数组从k反转到num.length.
这样就实现了从某个位置对数组的反转
private static void sum(int[] nums, int k) {
int n=nums.length;
//这里k有可能是大于数组长度的整数,所以要让k对整个数组取于。
k%=n;
//三次反转过程,调用reverse方法
reverse(nums,0,n-1);
reverse(nums,0,k-1);
reverse(nums,k,n-1);
}
//reserxe方法,实现数组长度从k到i的反转
private static void reverse(int[] nums, int k, int i) {
while (k<i){
int temp=nums[i];
nums[k++]=nums[i];
nums[i--]=temp;
}
}
看不出这是一道中级难度的算法题吧,想想算法解题可以很高效,代码还可以很简单,这应该就是算法的魅力。
第一篇中级题打卡,坚持…