其他分享
首页 > 其他分享> > 七月集訓 貪心

七月集訓 貪心

作者:互联网

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