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];
                }
            }
        }
    };
  • 相关阅读:
    L6循环神经网络
    L5语言模型与数据集
    L4文本预处理
    L2 Softmax与分类模型
    L3 多层感知机
    L1线性回归
    P4语法(4)Control block
    机器学习笔记(4)Logistic回归
    [CF] Sasha and One More Name
    机器学习笔记(3)多变量线性回归
  • 原文地址:https://www.cnblogs.com/UnGeek/p/5503610.html
Copyright © 2011-2022 走看看