28、合并区间

[1 3][2 6][8 10]-->[1 6][8 10]

就是将重叠的部分合并

创建链表保存结果

首先将原二维数组中按照第一个数进行排序,然后遍历二维数组,每次遍历的时候如果当前遍历的数组第一个个数小于等于链表结尾数组的第二个数,则更新链表结尾数为Math.max(last[1],cur[1]),否则将该数组加入链表中,最后转为二维数组输出即可

29、接雨水

这道题就是找规律题,找到通项公式water[i],在i位置的时候有多少水,这个时候就多猜想多写通式来验证是否正确,左边为1,右边为1,中间为0,中间就能存水,左边为1,右边为0,中间为0就不能存水,左边为1,右边为2,中间为0,只能存1的水,可以想到,左边的最大和右边最大的最小值可以存水,water[i]=Math.min(Math.max(0..i),Math.max(i..end))-height[i],发现通项确实是这样

直到通项了找个res累加输出就ok

30、环形链表II

找到链表环的起点,若没有就return null

这个题跟数学题一样,用快慢指针做,先用快慢指针判断是否有环,当有环时他们第一次相遇,此时设慢指针走了k步,此时快指针则走了2k步,设相遇距离离入口为m步,则头节点离入口为k-m

快指针此时减去m步正好是k-m步也就是入口,所以当第一次指针相遇时候,慢指针继续定义为head继续走,当慢指针和快指针再次相遇就是入口节点。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐