LeetCode刷题笔记-数据结构-day4

Posted LL.LEBRON

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode刷题笔记-数据结构-day4相关的知识,希望对你有一定的参考价值。

文章目录

LeetCode刷题笔记-数据结构-day4

240.搜索二维矩阵 II

1.题目描述

原题链接:240. 搜索二维矩阵 II

2.解题思路

题目说了矩阵两个重要的性质:

  • 每行的所有元素从左到右升序排列
  • 每列的所有元素从上到下升序排列

根据性质。我们可以发现,如果从右上角出发,初始化i = 0,j = m - 1

  1. matrix[i][j] == target,返回true
  2. matrix[i][j] > target,向左走,j--
  3. matrix[i][j] < target,向下走,i++
  4. 如果出界,返回false

最终的时间复杂度为O(n+m),符合题目要求

3.代码

class Solution 
    public:
    bool searchMatrix(vector<vector<int>>& v, int t) 
        int n=v.size(),m=v[0].size();
        int i=0,j=m-1;
        while(i<n&&j>=0)
            if(v[i][j]<t) i++;
            else if(v[i][j]>t) j--;
            else return true;
        
        return false;
    
;

435.无重叠区间

1.题目描述

原题链接:435. 无重叠区间

2.解题思路

算法:贪心

具体思路:

按照区间右端点排序

选择的区间结尾越小,余留给其它区间的空间就越大,就越能保留更多的区间,所以这里使用右端点排序。优先保留结尾小且不相交的区间。这样保留的区间也更多,从而需要移除的区间就越少!

3.代码

class Solution 
public:
    int eraseOverlapIntervals(vector<vector<int>>& v) 
        sort(v.begin(),v.end(),[](vector<int>& a,
        vector<int>& b)
            return a[1]<b[1];
        );
        int ed=v[0][1];
        int res=0;

        for(int i=1;i<v.size();i++)
            if(v[i][0]<ed) res++;
            else ed=v[i][1];
        
        return res;
    
;

以上是关于LeetCode刷题笔记-数据结构-day4的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题笔记-动态规划-day4

LeetCode刷题笔记-动态规划-day4

LeetCode刷题笔记-动态规划-day4

LeetCode刷题笔记-数据结构-day2

LeetCode刷题笔记-数据结构-day7

LeetCode刷题笔记-数据结构-day7