[学习报告]《LeetCode零基础指南》(第六讲) 贪心

千山万水总有路,勇敢迈出第一步!!!前路很难,路已过半,何言弃,言何弃
>> 算法的魅力,在于即使,知识你门清,题目给你一闷棍。
<< 有形的代码,被无形算法来回拉扯,翻滚吧,我的脑浆。

今日套餐【4 橙 5 绿 】。休息很重要,昨天 1点30 睡觉,早上 6点30 醒,困倦 + 暴躁呀 ~ 
绿题 1827 一次过,代码好优雅。橙题 945 想了一下,觉得肤浅了,肯定不会~ 晚上在群里,大家一点拨,一气呵成 + 注释 + 通过 🤦‍🤦‍🤦‍ 

一、吹逼 反省

今日学习内容:https://bbs.youkuaiyun.com/topics/605702199

脑子是个好东西,我有,我得好好用 ~
又是 排序 + 双指针 得一天呀。 

今日最 “牛”,611. 有效三角形的个数 👈 算你狠

双指针,核心理念左右指针,相向而行,相遇即终止 👇

二、晒战绩

话不多说,上图~ 👆 

三、写解题报告

题解报告,只写让我有 

 的那道题!
>> 算法的魅力,在于即使,知识你门清,题目给你一闷棍。
<< 有形的代码,被无形算法来回拉扯,翻滚吧,我的脑浆。

上点,让我彻夜难眠的 👇

1913. 两个数对之间的最大乘积差:题目意图 → 上个,两行的,找找自信

class Solution {
public:
    int maxProductDifference(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        return nums[nums.size()-1]*nums[nums.size()-2]-nums[0]*nums[1];
    }
};

945. 使数组唯一的最小增量:题目意图 → 上个,感觉不会,其实我会的

class Solution {
public:
    int minIncrementForUnique(vector<int>& nums) {
        int ans = 0;
        sort(begin(nums), end(nums));

        for(int i=1; i<nums.size(); i++) {
            // 排序后每一项满足的是:nums[0] <=... nums[i-1] <= nums[i] <= ... nums[N-1]
            // 遍历时为保证递增,元素值会变大,可能导致 nums[i-1] > nums[i]
            if(nums[i] <= nums[i-1]) {  // 若 当前元素小于等于 前一项,修正为大于前一项
                // 最小的增量要保证当前元素比前一项大 1,即 差值 + 1
                int dis = nums[i-1] - nums[i] + 1;
                // 更新当前元素值 和 ans
                nums[i] += dis;
                ans += dis;
            }
        } 
        return ans;
    }
};

324. 摆动排序 II:题目意图 →  上个,你以为是排序,其实还可以这样的

class Solution {
public:
    void wiggleSort(vector<int>& nums) {
        
        int N = nums.size();
        if(N==1) return;
        sort(begin(nums), end(nums));

        vector<int> ret(nums);  // 将 nums 深拷贝到 ret 中
        
        int r = N-1;
        // 先插奇数位,再插偶数位。请拿笔 画一下 👇
        for(int i = 1; i < N; i+=2) nums[i] = ret[r--];
        for(int i = 0; i < N; i+=2) nums[i] = ret[r--];
    }
};

611. 有效三角形的个数:题目意图 →  上个,让我迷路彷徨的,证明我肯定行的

class Solution {
public:
    int triangleNumber(vector<int>& nums) {
        int n = nums.size();
        if(n<3) return 0;   // 构不成三角形
        
        int ans = 0;
        sort(nums.begin(), nums.end());
        for (int i = 0; i < n; i++) {
            // 双指针扫描,j ... k 之间,有多少满足
            int k = i;
            for (int j = i + 1; j < n; j++) {
                while (k + 1 < n && nums[k + 1] < nums[i] + nums[j]) {
                    k++;
                }
                ans += max(k - j, 0);
            }
        }
        return ans;
    }
};

四、写给明天

多美美好的一天呀~~ 喜刷刷,喜刷刷 😀😀😀 喜刷刷 刷刷~ 😀😀😀 ~ 

疫情来了,我要被包围了,还好,我有算法和你们 ~  谁说不是呢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老坛算粉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值