1. 程式人生 > 其它 >【劍指紫金港】1040 Longest Symmetric String DP迴文字串

【劍指紫金港】1040 Longest Symmetric String DP迴文字串

技術標籤:LeetCode初級leetcode

旋轉陣列

題目連結

解題思路

最容易想到的解題方法就是使用額外的陣列空間,但是如果在空間複雜度為O(1)的情況下也是很好理解的,只是發現其中的規律比較難。這個規律就是進行三次陣列翻轉,如下圖:
在這裡插入圖片描述
需要注意的是k有可能大於陣列長度,所以先將k取餘

c++解法

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        k%=nums.size();
        reverse(nums.begin(),nums.end())
; reverse(nums.begin(),nums.begin()+k); reverse(nums.begin()+k,nums.end()); } };

java解法

java中也有封裝好的翻轉函式 Collections.reverse,不過引數是List物件,所以不太適合翻轉陣列,只能自己編寫函式來翻轉。

class Solution {
    public void rotate(int[] nums, int k) {
        int len=nums.length;
        k%=len;
        reverse
(nums,0,len-1); reverse(nums,0,k-1); reverse(nums,k,len-1); } public void reverse(int[] nums,int l,int r){ while(l<r){ int t=nums[l]; nums[l]=nums[r]; nums[r]=t; l++; r--; } } }

python解法

class Solution
: def rotate(self, nums: List[int], k: int) -> None: """ Do not return anything, modify nums in-place instead. """ k%=len(nums) self.reverse(nums,0,len(nums)-1) self.reverse(nums,0,k-1) self.reverse(nums,k,len(nums)-1) def reverse(self,nums,l,r): while l<r: t=nums[l] nums[l]=nums[r] nums[r]=t l+=1 r-=1