leetcode 旋转数组
生活随笔
收集整理的這篇文章主要介紹了
leetcode 旋转数组
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給定一個數組,將數組中的元素向右移動?k?個位置,其中?k?是非負數。
示例 1:輸入: [1,2,3,4,5,6,7] 和 k = 3
輸出: [5,6,7,1,2,3,4]
解釋: 向右旋轉 1 步: [7,1,2,3,4,5,6]
向右旋轉 2 步: [6,7,1,2,3,4,5]
向右旋轉 3 步: [5,6,7,1,2,3,4]
示例?2:輸入: [-1,-100,3,99] 和 k = 2
輸出: [3,99,-1,-100]
解釋: 向右旋轉 1 步: [99,-1,-100,3]
向右旋轉 2 步: [3,99,-1,-100]
說明:
- 盡可能想出更多的解決方案,至少有三種不同的方法可以解決這個問題。
- 要求使用空間復雜度為?O(1) 的原地算法。
題目分析:
一維數組的右旋其實就是把后面的數依次移到前面,而前面的數依次移到后面。比如當K=1即右旋一步,數組變為[7,1,2,3,4,5,6]?,如解釋所示。可以發現,是把最后一個元素提取出來,然后數組剩余元素依次向右移動一位,即可得到。若K=2,則再循環移動一次。由此我們可以知道,有一個最直觀的解法就是兩個循環嵌套即可。代碼如下:
//方法一 class Solution { public:void rotate(vector<int>& nums, int k) {int nums_len = nums.size(); while (k > 0) //大循環,循環K次。{ int a = nums[nums_len - 1];//這是獲取數組最高位置上的數字 for (int i = nums_len - 2; i >= 0; i--)//將數組中元素右移一位 { nums[i + 1] = nums[i]; } nums[0] = a; k--;} } };?
總結
以上是生活随笔為你收集整理的leetcode 旋转数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 红糙米的功效与作用、禁忌和食用方法
- 下一篇: 老母鸡汤的功效与作用、禁忌和食用方法