LeetCode 热题 100
文章目录
本文存储我刷题的笔记。
二分查找
59. 简单-搜索插入位置
![](https://i-blog.csdnimg.cn/blog_migrate/63d59804dc5f048b4429fe8894a0bd21.png)
我的思路:二分查找
思路:必然要 二分查找。但是和正常不同的是,若没有还要添加进去,所以关键点在于定义:要添加的位置始终在查找区间尾部。
时间0ms(100%),内存9.79MB(33.15%)。
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int len = nums.size();
int left = 0; // 左边界
int right = len - 1; // 右边界
int mid = 0; // 中间值
// 二分查找
while(left <= right){
mid = (left + right)/2;
if(nums[mid] >= target){
right = mid - 1;
}else{
left = mid + 1;
}
}
return left;
}
};
官方思路:
思路:
时间??ms(??%),内存??MB(??%)。
60. 中等-搜索二维矩阵
61. 中等-在排序数组中查找元素的第一个和最后一个位置
62. 中等-搜索旋转排序数组
63. 中等-寻找旋转排序数组中的最小值
64. 困难-寻找两个正序数组的中位数
栈
65. 简单-有效的括号
![](https://i-blog.csdnimg.cn/blog_migrate/f83ec2fba236ee062aad076304dd36d3.png)
我的思路
- 思路:显然用 栈。
- 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是字符串 s s s 的长度。
- 空间复杂度: O ( n ) O(n) O(n)。
- 时间0ms(100.00%),内存6.58MB(28.11%)。
class Solution {
public:
bool isValid(std::string s) {
// 去掉特殊情况:奇数个元素
int len = s.size();
if(len % 2 == 1){
return false;
}
// 遍历所有元素
std::stack<char> s_bracket; // 存储括号的栈
for(int i=0; i<len; i++){
// 若是左括号就压栈
if(s[i] == '(' || s[i] == '{' || s[i] == '['){
s_bracket.push(s[i]);
}
// 若是右括号就检查,并弹出栈
else {
if(s_bracket.empty()){
return false;
}else if(s[i] == ')' && s_bracket.top() != '('){
return false;
}else if(s[i] == '}' && s_bracket.top() != '{'){
return false;
}else if(s[i] == ']' && s_bracket.top() != '['){
return false;
}
s_bracket.pop();
}
}
// 栈空表示匹配完成
return s_bracket.empty();
}
};
官方思路:
思路:
时间??ms(??%),内存??MB(??%)。
66. 中等-最小栈
67. 中等-字符串解码
68. 中等-每日温度
69. 困难-柱状图中最大的矩形
我的思路
思路:
时间??ms(??%),内存??MB(??%)。
官方思路:
思路:
时间??ms(??%),内存??MB(??%)。