Leetcode 每日一题和每日一题的下一题刷题笔记 24/30
写在前面
这是我参与更文挑战的第24天,活动详情查看:更文挑战
快要毕业了,才发现自己被面试里的算法题吊起来锤。没办法只能以零基础的身份和同窗们共同加入了力扣刷题大军。我的同学们都非常厉害,他们平时只是谦虚,口头上说着自己不会,而我是真的不会。。。乘掘金鼓励新人每天写博客,我也凑个热闹,记录一下每天刷的前两道题,这两道题我精做。我打算每天刷五道题,其他的题目嘛,也只能强行背套路了,就不发在博客里了。
本人真的只是一个菜鸡,解题思路什么的就不要从我这里参考了,编码习惯也需要改进,各位如果想找刷题高手请教问题我觉得去找 宫水三叶的刷题日记 这位大佬比较好。我在把题目做出来之前尽量不去看题解,以免和大佬的内容撞车。
另外我也希望有得闲的大佬提供一些更高明的解题思路给我,欢迎讨论哈!
好了废话不多说开始第二十四天的前两道题吧!
2021.6.24 每日一题
这道题直接哈希表不谈了好吧,比直接暴力枚举要好一些,但也没那么好。哈希表存斜率,这里有个坑,和坐标轴平行的直线斜率是 0 或者不存在,这里也是八仙过海。
class Solution {
public:
int maxPoints(vector<vector<int>>& points) {
int len = points.size();
if (len < 3) {
return len;
}
int maxNum = 2;
for (int i = 0; i < len; i++) {
unordered_map<double, int> count;
for (int j = 0; j < len; j++) {
if (i != j) {
long long dx = points[i][0] - points[j][0];
long long dy = points[i][1] - points[j][1];
double gradient = dy * 1.0 / dx;
if (count.count(gradient)) {
count[gradient] ++;
} else {
count[gradient] = 2;
}
maxNum = max(maxNum, count[gradient]);
}
}
}
return maxNum;
}
};
2021.6.24 每日一题下面的题
这道题用栈,也可以窗口法,这类题有个变体,要用前缀和,之前说过。这道题够简单,直接栈就完事了。
class Solution {
public:
bool isValid(string s) {
int n = s.size();
if (n % 2 == 1) {
return false;
}
stack<char> stk;
for(int i = 0; i < n; i++) {
if (s[i] == '(') {
stk.push(')');
} else if (s[i] == '{') {
stk.push('}');
} else if (s[i] == '[') {
stk.push(']');
} else if (!stk.empty() && s[i] == stk.top()) {
stk.pop();
} else {
return false;
}
}
return stk.empty()?true:false;
}
};
小结
哈希表降复杂度只是一种优化方式,第一题有很多优化方式,知识点很碎。 第二题考栈的概念。
参考链接
无