zoukankan      html  css  js  c++  java
  • 旋转数组

    leetcode 189 

    给定一个数组,将数组中的元素向右移动 个位置,其中 是非负数。

    示例 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]

    先把前n-k个数字转置,再把后k个数字转置 再把全部数字转置
    需要注意 k = k % A.length;比如k=3 A={1,2} 这样相当于k=1
    class Solution {
        public void rotate(int[] nums, int k) {
            if(nums == null || nums.length == 0 || k % nums.length == 0)
                 return;
             
              int turns = k % nums.length;
              int middle = nums.length - turns;
             
            reverse(nums, 0, middle-1); // reverse left part
            reverse(nums, middle, nums.length-1); // reverse right part
            reverse(nums, 0, nums.length-1); // reverse whole part 
        }
        
        private void reverse(int[] A,int startIndex,int endIndex) {
            while (endIndex > startIndex) {
                int temp = A[startIndex];
                A[startIndex] = A[endIndex];
                A[endIndex] = temp;
    
                startIndex++;
                endIndex--;
            }
        }
    }

     方法二 暴力解法 循环k次移位 每次向右移一位 leetcode过了 leetcode-cn超时

    class Solution {
        public void rotate(int[] nums, int k) {
            if(nums == null || nums.length == 0 || k % nums.length == 0)
                 return;
             
              k = k % nums.length;
             for (int j = 0; j <k;j++) {
                int first = nums[nums.length-1];
                for (int i = nums.length-1 ; i > 0;i--){
                    nums[i] = nums[i-1];
                }
                nums[0]=first;
            }
        }
        
       
    }
  • 相关阅读:
    (网页)html中页面传递参数不用cookie不用缓存,js方法搞定
    (网页)table加上分页,优点可随便加样式
    (后端)分页比较好的语句
    (后端)Spring手动回滚事务
    jquery 插件开发
    mysql 触发器
    mysql 存储过程
    YaHoo 前端优化军规
    html5 离线存储
    java 网络编程
  • 原文地址:https://www.cnblogs.com/team42/p/10601109.html
Copyright © 2011-2022 走看看