【劍指紫金港】1040 Longest Symmetric String DP迴文字串
阿新 • • 發佈:2021-02-02
技術標籤: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