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

149 阅读2分钟

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

写在前面

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

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

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

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

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

2021.6.15 每日一题

image.png

852. 山脉数组的峰顶索引

这道题明确说了希望我找到 O(log(n))O(log(n)) 复杂度的解法,这不是明摆着让我二分嘛。。。


class Solution {
public:
    int peakIndexInMountainArray(vector<int>& arr) {
        int n = arr.size();
        int left = 1, right = n - 1, ans = 0;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (arr[mid] > arr[mid + 1]) {
                ans = mid;
                right = mid - 1;
            }
            else {
                left = mid + 1;
            }
        }
        return ans;
    }
};

image.png

哦代码的左右好像有点问题,左边界我写 01 都可以,右边界写 n - 1n - 2 都可以,实际上应该 0n - 1 搭配,1n - 2 搭配来的。然后这个题如果提示超时什么的估计就还是求中间那个值的时候溢出了,处理方法前面已经讲过很多次了,我不想再讲了。

2021.6.15 每日一题下面的题

1441. 用栈操作构建数组

思路很简单,用哈希表。目标数组存成哈希表,然后枚举自然数,哈希表里面有,就一个压,没有,就一压一弹。


class Solution {
public:
    vector<string> buildArray(vector<int>& target, int n) {
        unordered_map<int, int> m;
        vector<string> ans;
        int len = target.size(), max = target[len - 1];
        for (int i = 0; i < len; i++) {
            m[target[i]] = 1;
        }
        for (int i = 1; i <= max; i++) {
            if (m[i]) {
                ans.push_back("Push");
            }
            else {
                ans.push_back("Push");
                ans.push_back("Pop");
            }
        }
        return ans;
    }
};

image.png

小结

端午假期结束了,现在有点假期综合症。。。收皮收皮。

参考链接