七月集訓 貪心
作者:互联网
leetcode 2078
仔細認真理解題目的輸入,就發現這題實際上是在找最大值,秉承用最簡單的解法,就是枚舉,兩兩比對,
取下標的絕對值,每次比對之後比較是否比最大值大,如果是就更新最大值。
class Solution {
public:
int maxDistance(vector<int>& colors) {
int ans = 0;
for (int i = 0; i < colors.size(); ++i)
{
for (int j = i + 1; j < colors.size(); ++j)
{
if (colors[i] == colors[j]) continue;
else {
ans = abs(i - j) > ans ? abs(i - j) : ans;
}
}
}
return ans;
}
};
總結:通過本題我發現之前的我總是有畏難心理,覺得題目長就恐懼了,然後把注意點放在不重要的信息上,
如果是之前的我,就會把注意力放在房子的顏色和數字之間的關係上,好吧,我承認,在寫這題時,我也有
這種想法XD。我的寫法還有優化的空間,數值比較可以用庫函數max(),從而減少分支。
leetcode 561
吃了個飯後忘記了一切從簡的原則,我苦想了半天,還是沒能逃脫怪圈,想著如何把數組中的數字分組?!
辦法是遍歷數組然後兩兩相加,放到一個數組中,最後把數組中的和與ans 比較取最大。這題我5個月前
參加九日集訓還寫過,現在寫,一點印象都沒有。
class Solution {
public:
int arrayPairSum(vector<int>& nums) {
sort(nums.begin(), nums.end());
int ans = 0;
for (int i = 0; i < nums.size(); i += 2)
{
ans += nums[i];
}
return ans;
}
};
leetcode 1323
這題我想不到;
class Solution {
public:
int maximum69Number (int num) {
vector<int> s;
while(num)
{
s.push_back(num % 10);
num /= 10;
}
for (int i = s.size()-1; i >= 0; --i)
{
if (s[i] == 6)
{
s[i] = 9;
break;
}
}
int ret = 0;
for (int i = s.size()-1; i >= 0; --i)
{
ret = ret * 10 + s[i];
}
return ret;
}
};
最後一題,我連題目都看不懂
leetcode 942
标签:七月,num,nums,int,colors,集訓,ans,size,貪心 来源: https://www.cnblogs.com/sixiaoxiaoya/p/16444837.html