Leetcode7月29日打卡

139 阅读3分钟

1.leetcode 143题 链表重排序

一开始这个题没有思路的,很乱! 后面看了网上的讲解,发现! 链表的题 好像无非都是reverse 然后拼接 或者。。。 什么的,要么就是细节的处理,掌握好几个常用的写法, 应该问题不太大!

目前需要掌握好的两个函数,一个是reverse,还有一个就是把尾端的一个个放到前面!(其实两个是一样的!! )

这个题思路是 找到中点以后,把后半部分reverse,然后依次拼接! 自己对这块拼接其实不是很熟悉,不知道如何逐个去拼接,就定义了一个falg变量,依次去放! 还有一个细节就是应该要断开,设置一个pre变量去断开!

2.leetcode86题 链表的partition

很巧妙,自己想的是 用双指针的做法,一个指向res,一个去遍历,但是很麻烦!! 自己做到后面不会做了

解题思路是,用两个链表,一个存小于x的一个存大于x的,然后再将他们连接起来,主要需要移动的变量, cur1和cur2 ! 这里很巧妙,需要最后把结尾断开,cur2是大一点的,最后为null, cur1尾部连接cur2的头部!

3.leetcode328题 奇偶链表排序

也是利用两个链表,一个放奇数链表 一个放偶数链表,然后连接起来就可以

还有第二种方法,原地去做

这里很巧妙的是 让even 去判断,odd是不会为null的,所以最后可以让odd.next = evenHead

4.leetcode 23题 对k个链表进行排序

自己的做法是对每两个链表排序,两两排序

discuss里面最好的做法,是定义一个优先队列,由于链表的特殊性,可以把链表依次加进去,然后poll出最小的值,利用链表的特性,把后续的next加进去,一个结果指针cur 也依次遍历! 还是蛮神奇的!

5.leetcode11题 最大雨水量

可以用暴力 也能过

用双指针,如果左边小 就往右边移动,右边小 往左边移动

6.leetcode84题 最大矩形面积

找左边第一个比他小的数 和找右边第一个比他小的数,然后right[i] - left[i] - 1 算出面积

7.leetcode85题 最大矩形

和84题很像! 把每一行当成是一个矩形,很巧妙的一点是arr[j] + 1 每次统计的时候利用上一层的值,然后调用84题的那个函数 就可以实现! 思路很轻巧

8leetcode42题 最大需水量

找到每一个点 左边的最大值 和右边最大值 的最小值, 减去自身的高度,就是这一格的蓄水量! 用dp可以解决 还可以用双指针,特别巧妙!

9.leetcode 15题 三数之和

按之前思路来写的

10leetcode16题

在15题的基础上改了一点,但是自己犯了错误,找到合适值的时候 没有return,或者没有把minDis的值修改,导致res被覆盖掉了

自己看了下时间最快的做法,也是这么做的!

11.leetcode55题 跳跃游戏

贪心的做法,很妙,自己没有想到,其实可以用dfs或者dp,但是自己没有想出来,虽然会超时,但是dp的思想自己没有尝试 dfs也是!

12.leetcode45题

这个题还没搞明白!

其实思路还是! 走到最远的时候,再跳!