陣列問題
排序:選擇排序;插入排序;歸併排序;快速排序
查詢:二分查詢法
資料結構:棧;佇列;堆
……
如何寫出正確的程式
明確變數的含義
迴圈不變數
小資料量除錯
大資料量測試
leetcode
283.move zeros問題
給定乙個陣列nums,寫乙個函式,將函式中所有的0挪到陣列的末尾,而維持其他非0元素的相對位置.
舉例:nums = [0,1,0,3,12],函式執行後結果為[1,3,12,0,0]
**:
#include #include #include using namespace std;
class solution
}for(int i = 0; i < nonzeroelements.size(); i++)
for(int i = nonzeroelements.size(); i < nums.size(); i++)
}#endif
//方法2
//優化演算法,不需要接觸輔助空間
//時間複雜度o(n)
//空間複雜度o(1)
void movezeroes(vector& nums)
}//將nums剩餘的位置放置為0
for(int i = k; i < nums.size(); i++)
}//方法3
void movezeroes2(vector& nums)
else}}
}};int main();
vectorvec(arr,arr+sizeof(arr)/sizeof(int));
vectorvec2(arr,arr+sizeof(arr)/sizeof(int));
solution().movezeroes(vec);
solution().movezeroes2(vec2);
for(int i = 0; i < vec.size(); i++)
cout << endl;
for(int i = 0; i < vec2.size(); i++)
cout << endl;
return 0;
}
27.remove element
給定乙個陣列nums和乙個數值val,將陣列中所有等於val的元素刪除,並返回剩餘的元素個數.
需考慮的問題有:
·如何定義刪除?從陣列中去除?還是放在陣列末尾?
·剩餘元素的排列是否要保證原有的相對順序?
·是否有空間複雜度的要求?o(1)
#include #include #include using namespace std;
class solution
ele++;
}return count;
}};int main();
vectorvec(arr,arr+sizeof(arr)/sizeof(int));
int count = solution().removeelement(vec,3);
cout << count << endl;
for(int i = 0; i < count; i++)
cout << endl;
return 0;
}
26.remove duplicated from sorted array
給定乙個有序陣列,對陣列中的元素去重,使得原陣列中的每個元素只有乙個。返回去重陣列的長度值。
需考慮的問題有:
·如何定義刪除?從陣列中去除?還是放在陣列末尾?
·剩餘元素的排列是否要保證原有的相對順序?
·是否有空間複雜度的要求?o(1)
#include #include #include using namespace std;
class solution
ele++;
}nums[count] = nums[nums.size() - 1];
count++;
return count;
}};int main();
vectorvec(arr,arr+sizeof(arr)/sizeof(int));
int count = solution().removeduplicated(vec);
cout << count << endl;
for(int i = 0; i < count; i++)
cout << endl;
return 0;
}
80.remove duplicated from sorted array ii
給定乙個有序陣列,對陣列中的元素去重,使得原陣列的每個元素最多保留兩個,返回去重後陣列的長度值。
·如nums = [1,1,1,2,2,3]
·結果應返回5,且nums的前五個元素為1,1,2,2,3
#include #include #include using namespace std;
class solution
}ele1++;
ele2++;
}if(ele2 == nums.size() - 1)
return count;
}};int main();
vectorvec(arr,arr+sizeof(arr)/sizeof(int));
int count = solution().removeduplicated(vec);
cout << count << endl;
for(int i = 0; i < count; i++)
cout << endl;
return 0;
}
演算法 陣列連乘問題
乙個程度為n的陣列,現在要令 a 0 a 1 a 2 a n 1 a 1 a 0 a 2 a n 1 a 2 a 0 a 1 a n 1 a n 1 a 0 a 2 a n 2 條件是不能用除法,時間複雜度必須是線性。觀察一下題目,每乙個元素 i 都被更新成了a 0 到a n 1 除去 i 下標元素...
演算法 陣列指標問題
88.合併兩個有序陣列 給你兩個有序整數陣列 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為乙個有序陣列。說明 初始化 nums1 和 nums2 的元素數量分別為 m 和 n 你可以假設 nums1 有足夠的空間 空間大小大於或等於 m n 來儲存 n...
簡單演算法 陣列
1.給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。param nums return var removeduplicates function nums prices return var maxprofit function prices pa...