第一次 写一些关于每次刷题遇到困难的题的题解,跟大家分享
给定一个数组,将数组中的元素向右移动 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; } }
看不出这是一道中级难度的算法题吧,想想算法解题可以很高效,代码还可以很简单,这应该就是算法的魅力。
第一篇中级题打卡,坚持…