zoukankan      html  css  js  c++  java
  • leetcode 189. Rotate Array

    Rotate an array of n elements to the right by k steps.

    For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].

    Note:
    Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.

    [show hint]

    Related problem: Reverse Words in a String II

    选择数组,将数组向右以为k步,在《编程珠玑》中有讲过这个算法,下面是比较好理解的“两手翻转法”

    下面为python代码,自己写的不是很geek

    class Solution(object):
        def rotate(self, nums, k):
            """
            :type nums: List[int]
            :type k: int
            :rtype: void Do not return anything, modify nums in-place instead.
            """
            while k >= len(nums): k -= len(nums)
            for i, v in enumerate(nums[-k::] + nums[:-k]):
                nums[i] = v
    

     后面改进:

    class Solution(object):
    def rotate(self, nums, k):
    """
    :type nums: List[int]
    :type k: int
    :rtype: void Do not return anything, modify nums in-place instead.
    """
    if not nums: return
    k %= len(nums)
    nums[0:k], nums[k:] = nums[- k:], nums[0: - k]

    另外一种解法:

    class Solution {
    public:
        void rotate(int nums[], int n, int k) {
            int nowIndex = 0, nextIndex;
            int tmp1, tmp2 = nums[0];
            for(int j=0,i=0; j<n; j++){
                tmp1 = tmp2;
                nowIndex = (k + nowIndex) % (n);
                tmp2 = nums[nowIndex];
                nums[nowIndex] = tmp1;
                if(nowIndex == i) {
                    nowIndex = ++i;
                    tmp2 = nums[nowIndex];
                }
            }
        }
    };
  • 相关阅读:
    Java中的事务
    ABCDE
    Android 防内存泄露handler
    自建应用新花样,菜鸟也会做应用
    软件測试之独步武林系列(一)
    刚在在win8.1下装了ubuntu12.04
    SVN 的一些操作
    [华为机试练习题]42.求二叉树的深度和宽度
    iOS_正則表達式
    在应用中更新App版本号
  • 原文地址:https://www.cnblogs.com/UnGeek/p/5503610.html
Copyright © 2011-2022 走看看