【小白C++學習之路】C++經典的優化代碼


  • 求最小公倍數
我的代碼:(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()函數根據截止元素進行擦除。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM