- 求最小公倍數
我的代碼:(x1, y1不為0) int k; k = x/x1; k = min(k, y/y1); 經典的優化代碼: int k; k = min(x/x1, y/y1);
- 比較,然后確定是否自增1
我的代碼: for (int i = 0; i<arr.size()-1; ++i){ if (dp1[i] <= dp2[i+1]) ++res; } 經典優化代碼: for (int i = 0; i<arr.size()-1; ++i){ res += (dp1[i] <= dp2[i+1]); } (小括號其實也可以去掉,+=優先級小於比較運算符)
- 求一個數組的左面最大與右面最小dp數組。
我的代碼:(兩次for分別求兩個dp數組) dp1[0] = arr[0]; dp2[arr.size()-1] = arr[arr.size()-1]; for (int i=1; i<arr.size(); ++i){ dp1[i] = max(dp1[i-1], arr[i]); } for (int i=arr.size()-2; i>=0; --i){ dp2[i] = min(dp2[i+1], arr[i]); } 經典優化代碼: dp1[0] = arr[0]; dp2[arr.size()-1] = arr[arr.size()-1]; for (int i=1; i<arr.size(); ++i){ dp1[i] = max(dp1[i-1], arr[i]); dp2[arr.size()-1-i] = min(dp2[arr.size()-i], arr[arr.size()-1-i]); }
記錄一些很有收獲的代碼。
1、vector元素去重
sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end());
sort()函數對vector進行排序;
unique()函數讓重復元素放在最后,返回重復元素開始的iterator;
erase()函數根據截止元素進行擦除。
