数据结构基础day4

题目:240. 搜索二维矩阵II

解法:Z字型

从右上角开始遍历,查询左下到(x,y)范围内的大小,如果大于target,则y–,如果小于target,x++

class Solution {
    
    
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
    
    
        int m=matrix.size(), n=matrix[0].size();
        int x=0, y=n-1;
        while(x<m && y>=0){
    
    
            if(matrix[x][y]==target){
    
    
                return true;
            }else if(matrix[x][y]>target){
    
    
                --y;
            }else{
    
    
                ++x;
            }
        }
        return false;
    }
};

题目:435. 无重叠区间

解法:贪心

按照每个区间的右端点从小到大排序,初始以第一个区间的右端点为右界,判断接下来的区间左端点是否大于等于右界,若是,右界更新为新区间的右端点,否则判断下一个区间。

class Solution {
    
    
public:
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
    
    
        if(intervals.empty()) return 0;	//特判
        sort(intervals.begin(), intervals.end(), [](vector<int> &u, vector<int> &v){
    
    
            return u[1]<v[1];
        });	//按照右端点对intervals进行排序,注意判断函数的写法[]{}
        int n = intervals.size();
        int right = intervals[0][1], ans=1;	//初始化右界right和ans(不重叠区间数量,注意为1,即intervals[0])
        for(int i=1; i<n; ++i){
    
    	//从1开始
            if(intervals[i][0]>=right){
    
    	//如果区间左端点大于等于右界,则不重叠,ans++,更新右界
                ++ans;
                right = intervals[i][1];
            }
        }
        return n-ans;	//总数减去不重叠区间数即为需要去除的区间数量
    }
};

猜你喜欢

转载自blog.csdn.net/qq_43606119/article/details/130274987