力扣hot100 61-70记录

61-70
leetcodehot100

cpp 复制代码
class Solution {
private:
    vector<vector<int>> f;
    vector<vector<string>> ret;
    vector<string> ans;
    int n;
public:
    void dfs(const string &s, int i){
        if(i == n) {
            ret.push_back(ans);
            return;
        }
        for(int j = i; j<n; j++){
            if(f[i][j]){
                ans.push_back(s.substr(i, j-i+1));
                dfs(s, j+1);
                ans.pop_back();
            }
        }
    }
    vector<vector<string>> partition(string s) {
        n = s.size();
        f.assign(n, vector<int>(n, true));
        for(int i = n-1; i>=0; i--){
            for(int j = i+1; j<n; j++){
                f[i][j] = (s[i] == s[j]) && f[i+1][j-1];
            }
        }
        dfs(s, 0);
        return ret;        
    }
};//61
cpp 复制代码
class Solution {
public:
    vector<vector<string>> solveNQueens(int n) {
        vector<vector<string>> ans;
        vector<int> queens(n);
        vector<int> col(n), diag1(n*2-1), diag2(n*2-1);
        auto dfs = [&](this auto&& dfs, int r){
            if(r == n){
                vector<string> board(n);
                for(int i = 0; i<n; i++){
                    board[i] = string(queens[i], '.') + 'Q' + string(n-1-queens[i], '.');
                }
                ans.push_back(board);
                return;
            }
            for(int c = 0; c<n; c++){
                int rc = n-1+r-c;
                if(!col[c] && !diag1[r+c] && !diag2[rc]){
                    queens[r] = c;
                    col[c] = diag1[r+c] = diag2[rc] = true;
                    dfs(r+1);
                    col[c] = diag1[r+c] = diag2[rc] = false;
                }
            } 
        };
        dfs(0);
        return ans;        
    }
};//62
cpp 复制代码
class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int n = nums.size();
        int left = 0, right = n-1, ans = n;
        while(right >= left){
            int mid = left + (right - left)/2;
            if(nums[mid] >= target){
                ans = mid;
                right = mid-1;
            }else{
                left = mid+1;
            }
        } 
        return ans;
    }
};//63
cpp 复制代码
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int m = matrix.size(), n = matrix[0].size();
        for(int i = 0; i<m; i++){
            if(matrix[i][0] <= target && target <= matrix[i][n-1]){
                int left = 0, right = n-1;
                while(right >= left){
                    int mid = (right - left)/2 + left;
                    if(matrix[i][mid] > target){
                        right = mid - 1;
                    } else if(matrix[i][mid] < target){
                        left = mid + 1;
                    }else{
                        return true;
                    }
                }
                return false;
            }
        }
        return false;
    }
};//64
cpp 复制代码
class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        vector<int> ans(2, -1);
        int left = 0, right = nums.size() - 1;
        while(right >= left){
            int mid = left + (right - left)/2; 
            if(nums[mid] == target){
                int tmp = mid;
                while(mid < nums.size()-1 && nums[mid + 1]==target) mid++;
                ans[1] = mid;
                while(tmp > 0 && nums[tmp-1]==target) tmp--;
                ans[0] = tmp;
                return ans;
            } else if(nums[mid] > target){
                right = mid - 1;
            } else{
                left = mid + 1;
            }
        }
        return ans;  
    }
};//65
cpp 复制代码
class Solution {
public:
    int search(vector<int>& nums, int target) {
        int n = nums.size();
        int l = 0, r = n-1;
        while(l<=r){
            int mid = (l+r)/2;
            if(nums[mid] == target)return mid;
            if(nums[0] <= nums[mid]){
                if(nums[0] <= target && target < nums[mid]) r = mid - 1;
                else l = mid + 1;
            }else{
                if(nums[mid] < target && target <= nums[n-1]) l = mid + 1;
                else r = mid - 1;
            }
        } 
        return -1;
    }
};//66
cpp 复制代码
class Solution {
public:
    int findMin(vector<int>& nums) {
        int l = 0, r = nums.size() - 1;
        while(r > l){
            int mid = l + (r - l) / 2;
            if(nums[mid] < nums[r]){
                r = mid;
            }else{
                l = mid + 1;
            }
        }   
        return nums[r];    
    }
};//67
cpp 复制代码
class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        if(nums1.size() > nums2.size()) swap(nums1, nums2);
        int m = nums1.size(), n = nums2.size();
        nums1.insert(nums1.begin(), INT_MIN);
        nums2.insert(nums2.begin(), INT_MIN);
        nums1.push_back(INT_MAX);
        nums2.push_back(INT_MAX);

        int i = 0, j = (m + n +1) / 2;
        while(true){
            if(nums1[i] <= nums2[j+1] && nums1[i+1] > nums2[j]){
                int max1 = max(nums1[i], nums2[j]);
                int min2 = min(nums1[i+1], nums2[j+1]);
                return (m+n)%2 ? max1 : (min2 + max1) / 2.0;
            }
            i++;
            j--;
        }        
    }
};//68
cpp 复制代码
class Solution {
public:
    bool isValid(string s) {
        unordered_map<char,char> pairs={
            {')', '('},
            {']', '['},
            {'}', '{'}
        };
        stack<char> stk;
        for(char ch : s){
            if(pairs.count(ch)){
                if(stk.empty() || stk.top() != pairs[ch]) return false;
                stk.pop();
            }else{
                stk.push(ch);
            }
        }        
        return stk.empty();
    }
};//69
cpp 复制代码
class MinStack {
public:
    stack<int> x_stack;
    stack<int> min_stack;
    MinStack() {
        min_stack.push(INT_MAX);
    }
    
    void push(int val) {
        x_stack.push(val);
        min_stack.push(min(min_stack.top(), val));        
    }
    
    void pop() {
        x_stack.pop();
        min_stack.pop();
    }
    
    int top() {
        return x_stack.top();
    }
    
    int getMin() {
        return min_stack.top();
    }
};//70
相关推荐
豆沙沙包?8 分钟前
2025年- H13-Lc120-189.轮转数组(普通数组)---java版
java·算法·排序算法
吃不饱的得可可19 分钟前
【算法】单词搜索、最短距离
算法·深度优先
初级代码游戏42 分钟前
基于C++的IOT网关和平台1:github项目ctGateway
c++·物联网·github
YuforiaCode1 小时前
第十六届蓝桥杯 2025 C/C++组 破解信息
c语言·c++·蓝桥杯
南玖yy1 小时前
C++ 成员变量缺省值:引用、const 与自定义类型的初始化规则详解,引用类型和const类型的成员变量自定义类型成员是否可以用缺省值?
c语言·开发语言·c++·后端·架构·c++基础语法
ricky_fan1 小时前
LeetCode:55.跳跃游戏——局部最优并非全局最优!
算法·leetcode·游戏
YuforiaCode1 小时前
第十六届蓝桥杯 2025 C/C++组 旗帜
c语言·c++·蓝桥杯
YuforiaCode1 小时前
第十六届蓝桥杯 2025 C/C++B组 第二轮省赛 全部题解(未完结)
c语言·c++·蓝桥杯
一只码代码的章鱼1 小时前
学习笔记(算法学习+Maven)
笔记·学习·算法
keep intensify2 小时前
数据结构---单链表的增删查改
c语言·数据结构·c++·经验分享·学习·算法·分享