• 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.

    思想:
    1.—567旋转—765
    2.—1234旋转—4321
    3.—整体旋转4321765—5671234

    解决方案:

    void reverse(int left,int right,int *array)
    {
        int temp = 0;
        while(left<right)
        {
    
            temp = array[left];
            array[left]= array[right];
            array[right] = temp;
            left++;
            right--;
        }
    }
    
    void rotate(int* nums, int numsSize, int k)
    {
        k = k%numsSize;//不知道为何这里要加上这一句?
        reverse(0,numsSize-k-1,nums);
        reverse(numsSize-k,numsSize-1,nums);
        reverse(0,numsSize-1,nums);
    }

    这里写图片描述

    python解决方案:

    class Solution:
    # @param nums, a list of integer
    # @param k, num of steps
    # @return nothing, please modify the nums list in-place.
    def rotate(self, nums, k):
        if not nums:
            return
        k%=len(nums)
        nums.reverse()
        self.reverse(nums,0,k-1)
        self.reverse(nums,k,len(nums)-1)
    
    
    def reverse(self,nums,start,end):
        while start<end:
            nums[start],nums[end]=nums[end],nums[start]
            start+=1
            end-=1
    
  • 相关阅读:
    Freckles (最小生成树)
    素数筛法 模板
    Least Common Multiple (最小公倍数,先除再乘)
    Watering Grass (贪心,最小覆盖)
    Minimal coverage (贪心,最小覆盖)
    今年暑假不AC (贪心)
    Bzoj1072 [SCOI2007]排列perm
    Bzoj1087 [SCOI2005]互不侵犯King
    POJ1185 炮兵阵地
    POJ3254 Corn Fields
  • 原文地址:https://www.cnblogs.com/wuyida/p/6301343.html
Copyright © 2020-2023  润新知