首页 > 编程语言 >代码随想录算法训练营第第36天 | 452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间

代码随想录算法训练营第第36天 | 452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间

时间:2024-06-12 23:21:21浏览次数:9  
标签:return 重叠 随想录 number points let 区间 435

今天的三道题目,都算是 重叠区间 问题,大家可以好好感受一下。 都属于那种看起来好复杂,但一看贪心解法,惊呼:这么巧妙!

这种题还是属于那种,做过了也就会了,没做过就很难想出来。

不过大家把如下三题做了之后, 重叠区间 基本上差不多了

  1. 用最少数量的箭引爆气球
    https://programmercarl.com/0452.用最少数量的箭引爆气球.html
/**
 * @param {number[][]} points
 * @return {number}
 */
var findMinArrowShots = function(points) {
    points.sort((a,b)=>{
        if (a[0]!==b[0]) {
            return a[0]-b[0]
        } else {
            return a[1] - b[1];
        }
    });
    let res = 1;
    for (let i=1;i<points.length;i++) {
        if (points[i][0] > points[i-1][1]) {
            res++;
        } else {
            points[i][1] = Math.min(points[i][1], points[i-1][1])
        }
    }
    return res;
};
  1. 无重叠区间

https://programmercarl.com/0435.无重叠区间.html

跟上一题类似,但需要一个变量记录上一轮的重叠右边界
/**
 * @param {number[][]} intervals
 * @return {number}
 */
var eraseOverlapIntervals = function(intervals) {
    intervals.sort((a, b)=>{
        if (a[0] !== b[0]) {
            return a[0] - b[0];
        } else {
            return a[1] - b[1];
        }
    })

    let res = 0;
    let end = intervals[0][1];
    for (let i=1;i<intervals.length;i++) {
        if (intervals[i][0] < end) {
            res++;
            end = Math.min(intervals[i][1], end)
        } else {
            end = intervals[i][1]
        }
    }
    return  res;
};

763.划分字母区间

https://programmercarl.com/0763.划分字母区间.html

有思路,但写不出来
/**
 * @param {string} s
 * @return {number[]}
 */
var partitionLabels = function(s) {
    const sArr = new Array();
    for (let i=0;i<s.length;i++) {
        let index = s[i].charCodeAt() - 'a'.charCodeAt();
        sArr[index] = i;
    }
    let index = 0;
    const res = [];
    let prev = 0
    for (let i=0;i<s.length;i++) {
        let ind = s[i].charCodeAt() - 'a'.charCodeAt()
        index = Math.max(index, sArr[ind]);
        if (i === index) {
            res.push(i + 1 - prev);
            prev = i+1;
        }
    }
    return res;
};

标签:return,重叠,随想录,number,points,let,区间,435
From: https://www.cnblogs.com/yuanyf6/p/18244935

相关文章

  • 代码随想录 算法训练营d7 哈希表 Leetcode454 四数相加2 Leetcode383 赎金信 Leetcode
    Leetcode454四数相加2 题目链接简单理解四个数组的数构成元组 相加为0思想:参考力扣第一题两数之和 才用哈希表解决问题通过将ab数组之和存储到哈希表中,并记录次数再通过计算-(c+d)去匹配哈希表如果存在那么count+=次数即可classSolution{publicintfour......
  • 代码随想录算法训练营第八天 | 344.反转字符串 541.反转字符串Ⅱ 卡玛网:54.替换数字
    344.反转字符串题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题。解题:思路:双指针,秒了点击查看代码classSolution:defreverseString......
  • 代码随想录第6天 | ●哈希表理论基础●242.有效的字母异位词●349. 两个数组的交集●2
    题目:242.有效的字母异位词思路:1.ASCII和哈希函数,存入数组,比较数组相等否2.首先选择数据结构,题目只有小写字母,ASCII连续,选用数组,一个字符串遍历,在哈希数组中存入字母出现频率,第二个字符串遍历,做减法。(不需要记ASCII,直接减字母,编译器自己算)时间复杂度:O(n)空间复杂度:O(1)坑......
  • 代码随想录算法训练营第三十六天 | 406.根据身高重建队列
    406.根据身高重建队列题目链接文章讲解视频讲解思路:  先按照身高由大到小排序,如果身高相同,比较人数(由小到大);  按照人数重构数组,将节点插入到合适的位置classSolution{private:staticboolcompareByK(vector<int>&lhs,vector<int>&rhs){if(lhs[......
  • Day49 代码随想录打卡|二叉树篇---二叉搜索树中的搜索
    题目(leecodeT700):给定二叉搜索树(BST)的根节点 root 和一个整数值 val。你需要在BST中找到节点值等于 val 的节点。返回以该节点为根的子树。如果节点不存在,则返回 null 。方法:递归法:本题考察了二叉搜索树的特性,二叉搜索树指的是在这个二叉树中,他的每一个根节点......
  • 代码随想录算法训练营第第35天 | 977.有序数组的平方1005.K次取反后最大化的数组和 、
    1005.K次取反后最大化的数组和本题简单一些,估计大家不用想着贪心,用自己直觉也会有思路。https://programmercarl.com/1005.K次取反后最大化的数组和.html自己写的时间复杂度太高,看答案优化/***@param{number[]}nums*@param{number}k*@return{number}*/varl......
  • 代码随想录 算法训练营 d6 哈希表 Leetcode242 有效的字母异位词 Leetcode349 两个数
    哈希表很重要哈希表哈希表场景一般哈希表都是用来快速判断一个元素是否出现集合里一般来说数组模拟哈希set 哈希map不同的场景 当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,se......
  • 合并区间
    Problem:56.合并区间目录思路解题方法复杂度Code1这个写的有点不优美了丑Code2思路bite数组与排序两种思路解题方法描述你的解题方法复杂度时间复杂度:添加时间复杂度,示例:$O(n)$空间复杂度:添加空间复杂度,示例:$O(n)$Code1这个写的有点不优美了丑......
  • 代码随想录算法训练营第9天 |
    28.strStr()https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/description/实现strStr()代码随想录https://programmercarl.com/0028.实现strStr.html#思路459.重复字符串https://leetcode.cn/problems/repeated-substring-pattern/submis......
  • 代码随想录算法训练营第七天 |
    454.四数相加题目:给你四个整数数组nums1、nums2、nums3和nums4,数组长度都是n,请你计算有多少个元组(i,j,k,l)能满足:0<=i,j,k,l<nnums1[i]+nums2[j]+nums3[k]+nums4[l]==0解题:思路:使用map,key为a+b,value为出现次数。再遍历k、l寻找0-a-b。关键:遍历......