以下是本人的c++演算法學習筆記,記錄在部落格上以供自己隨時查閱
題目描述:給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數
盡可能想出更多的解決方案,至少有三種不同的方法可以解決這個問題。要求使用空間複雜度為 o(1) 的原地演算法。
我先在vs2017上整體實現該功能,再將關鍵**在leetcode上執行
我比較笨,所以只學會了兩種方法,將這兩種方法做下筆記,等第二遍刷題的時候再回來對比。
方法一:每次把最後乙個元素取出,前面元素整體後移一位,再把取出的最後一位元素放到第一位,迴圈k次
void rotate(vector& nums, int k)
nums[0] = temp;
}}
方法二:1.將陣列翻轉 2.翻轉前k個資料元素 3.翻轉剩餘的資料元素
void rotate02(vector&nums, int k)
整體**:
#include#include#includeusing namespace std;
//方法一 每次把最後乙個元素取出,前面元素整體後移一位,再把取出
//的最後一位元素放到第一位,迴圈k次
void rotate(vector& nums, int k)
nums[0] = temp; }}
//方法二:陣列全部反轉,然後再依次反轉前k個資料和最後n-k個資料
void rotate02(vector&nums, int k)
int main()
; vectornums(a, a + 6);
//rotate(nums, 2);
rotate02(nums, 2);
for (int i = 0; i < nums.size(); i++)
cout << endl;
system("pause");
return 0;
}
leetcode 初級演算法 陣列
給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度2,並且原陣列 nums 的前兩個元素被修改為1,2...
Leetcode 初級演算法 陣列
給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o 1 額外空間的條件下完成。給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為 1...
LeetCode 初級演算法 陣列
給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。輸入 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 輸入 ...