59-69-二分查找、栈

LeetCode 热题 100

文章目录

  • LeetCode 热题 100
  • 二分查找
    • 59. 简单-搜索插入位置
    • 60. 中等-搜索二维矩阵
    • 61. 中等-在排序数组中查找元素的第一个和最后一个位置
    • 62. 中等-搜索旋转排序数组
    • 63. 中等-寻找旋转排序数组中的最小值
    • 64. 困难-寻找两个正序数组的中位数
    • 65. 简单-有效的括号
    • 66. 中等-最小栈
    • 67. 中等-字符串解码
    • 68. 中等-每日温度
    • 69. 困难-柱状图中最大的矩形

本文存储我刷题的笔记。


二分查找

59. 简单-搜索插入位置

59-69-二分查找、栈_第1张图片

我的思路:二分查找

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

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

59-69-二分查找、栈_第2张图片

我的思路

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


你可能感兴趣的:(#,LeetCode刷题,算法,数据结构,java)