[Java][Leetcode simple] 189. 轮转数组

打印 上一主题 下一主题

主题 1799|帖子 1799|积分 5397

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
借助辅助数组

  1.   借助一个辅助数组tmp保存后面k个元素
  2.   然后逆序循环,使用数组前面n-k个元素覆盖最后到后面
  3.   最后把前k个元素从tmp中拿回来
复制代码
  1. public void rotate(int[] nums, int k) {
  2.         int len = nums.length;
  3.         k = k % len;
  4.         int[] Ra = new int[len];
  5.         int cnt = 0;
  6.         for (int i = len-k ; i < len; i++) {
  7.             Ra[cnt++] = nums[i];
  8.         }
  9.         for (int i = len-1; i >=0 ; i--) {
  10.             if(i>=k){
  11.                 nums[i] = nums[i-k];
  12.             }else{
  13.                 nums[i] = Ra[i];
  14.             }
  15.         }
  16.     }
复制代码
借助数组旋转

先团体旋转
然后0~k-1旋转
最后k-n-1旋转,即可得到目标数组
  1.     public void rotate2(int[] nums, int k) {
  2.         int len = nums.length;
  3.         k = k % len;
  4.         reverse(nums, 0, len-1);
  5.         reverse(nums, 0, k-1);
  6.         reverse(nums, k, len-1);
  7.     }
  8.     public void reverse(int[] nums, int start, int end) {
  9.        while (start < end) {
  10.            int temp = nums[start];
  11.            nums[start] = nums[end];
  12.            nums[end] = temp;
  13.            start++;
  14.            end--;
  15.        }
  16.     }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

玛卡巴卡的卡巴卡玛

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表