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];
                }
            }
        }
    };
  • 相关阅读:
    与(&,&&)和或(|,||)的区别
    vue笔记(更新中)
    echarts实现心脏图的滚动三种实现方法
    生成四则运算
    软件工程第四次作业
    软件工程第三次作业
    软件工程第二次作业
    软件工程第一次作业
    前端优化
    关于事件监听
  • 原文地址:https://www.cnblogs.com/UnGeek/p/5503610.html
Copyright © 2011-2022 走看看