Leetcode 每日一题和每日一题的下一题刷题笔记 14/30

171 阅读2分钟

Leetcode 每日一题和每日一题的下一题刷题笔记 14/30

写在前面

这是我参与更文挑战的第14天,活动详情查看:更文挑战

快要毕业了,才发现自己被面试里的算法题吊起来锤。没办法只能以零基础的身份和同窗们共同加入了力扣刷题大军。我的同学们都非常厉害,他们平时只是谦虚,口头上说着自己不会,而我是真的不会。。。乘掘金鼓励新人每天写博客,我也凑个热闹,记录一下每天刷的前两道题,这两道题我精做。我打算每天刷五道题,其他的题目嘛,也只能强行背套路了,就不发在博客里了。

本人真的只是一个菜鸡,解题思路什么的就不要从我这里参考了,编码习惯也需要改进,各位如果想找刷题高手请教问题我觉得去找 宫水三叶的刷题日记 这位大佬比较好。我在把题目做出来之前尽量不去看题解,以免和大佬的内容撞车。

另外我也希望有得闲的大佬提供一些更高明的解题思路给我,欢迎讨论哈!

好了废话不多说开始第十四天的前两道题吧!

2021.6.14 每日一题

374. 猜数字大小

这道题用二分查找,计算中间的数时要注意把计算式改一下,防止越界。


/** 
 * Forward declaration of guess API.
 * @param  num   your guess
 * @return 	     -1 if num is lower than the guess number
 *			      1 if num is higher than the guess number
 *               otherwise return 0
 * int guess(int num);
 */

class Solution {
public:
    int guessNumber(int n) {
        int left = 1, right = n;
        while (left < right) {
            int mid = left + (right - left) / 2;
            if (guess(mid) <= 0) {
                right = mid;
            } else {
                left = mid + 1;
            }
        }
        return left;
    }
};

image.png

有测试用例会用到 int 最大值,一加就越界,所以求平均值的形式依然要变,要不然就换 long long

2021.6.14 每日一题下面的题

152. 乘积最大子数组

这道题又是动态规划,和以前一样,列状态转移方程。

maxF[i] = max(maxF[i - 1] * nums[i], max(nums[i], minF[i - 1] * nums[i]));

minF[i] = min(minF[i - 1] * nums[i], min(nums[i], maxF[i - 1] * nums[i]));

这个题有正有负,可能使得当前最大值变化的有当前的最大值和当前数字的乘积,当前看到的这个数字,还有当前的最小值和当前数字的乘积。然后可能使得当前最小值变化的有当前最小值和当前数字的乘积,当前看到的数字,还有当前最大值和当前数字的乘积。然后状态转移方程就写完了。

另外要注意一件事,局部最大和全局最大这道题里面是不一样的,这个地方把我给卡了。


class Solution {
public:
    int maxProduct(vector<int>& nums) {
        vector <int> maxF(nums), minF(nums);
        for (int i = 1; i < nums.size(); ++i) {
            maxF[i] = max(maxF[i - 1] * nums[i], max(nums[i], minF[i - 1] * nums[i]));
            minF[i] = min(minF[i - 1] * nums[i], min(nums[i], maxF[i - 1] * nums[i]));
        }
        return *max_element(maxF.begin(), maxF.end());
    }
};

image.png

我以为这道题就这样轻松秒杀了,翻一翻评论区发现了超神的官方解法

这是优化过的官方解法,代码不贴了,这里不用把最大值的数组全保存下来,只要保存历史最大值和当前最大值,全局最大值也只能在这俩里面选。今天吃粽子吃顶了脑子也不好使了。。。

image.png

小结

端午节快乐啊,大家不要南北之争甜咸对立了,像我一样把能吃到的粽子都吃一遍不香嘛。

参考链接