59-69-二分查找、栈

LeetCode 热题 100


本文存储我刷题的笔记。


二分查找

59. 简单-搜索插入位置

我的思路:二分查找

  • 思路:必然要 二分查找。但是和正常不同的是,若没有还要添加进去,所以关键点在于定义:要添加的位置始终在查找区间尾部。

  • 时间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. 简单-有效的括号

我的思路

  • 思路:显然用
  • 时间复杂度: 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(??%)。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

虎慕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值