网站备案IP与空间,wnmp搭建后怎么做网站,儿童摄影网页制作代码html,泰安二手房最新发布出售房源题目#xff1a;力扣#xff08;LeetCode#xff09;官网 - 全球极客挚爱的技术成长平台
题解#xff1a;
如果直接暴力双循环会时间超限#xff0c;所以我选择了一个空间复杂度比较高的方法。直接再创建一个数组#xff0c;然后对应位置替换#xff0c;最后把值赋给原…题目力扣LeetCode官网 - 全球极客挚爱的技术成长平台
题解
如果直接暴力双循环会时间超限所以我选择了一个空间复杂度比较高的方法。直接再创建一个数组然后对应位置替换最后把值赋给原来的nums数组。 public void rotate(int[] nums, int k) {int []ans new int[nums.length];k k% nums.length;for(int i0;i nums.length;i){ans[i]nums[(i nums.length-k)% nums.length];}for(int i0;inums.length;i){nums[i]ans[i];}
// for(int i0;inums.length;i)
// System.out.print(nums[i] );} 但是这种方法空间复杂度有些高了只能说是大家都能想到的办法还有没有更好的办法
当然有那就是翻转数组首先我们来观察一下样例 输入1 2 3 4 5 6 7 输出5 6 7 1 2 3 4 有没有发现什么如果没有让我们把输入的数组翻转一下 输入7 6 5 4 3 2 1翻转后 输出5 6 7 1 2 3 4 现在发现了吧我们以数组中第k个元素为界分开 输入7 6 5 4 3 2 1翻转后 输出5 6 7 1 2 3 4 观察到这里我们就可以写代码了
public void rotate(int[] nums, int k) {k % nums.length;reverse(nums, 0, nums.length - 1);reverse(nums, 0, k - 1);reverse(nums, k, nums.length - 1);}public void reverse(int[] nums, int l, int r) {while (l r) {int temp nums[l];nums[l] nums[r];nums[r] temp;l;r--;}} 此时空间复杂度为O(1)