
LeetCode 没日没夜刷
码手西风
这个作者很懒,什么都没留下…
展开
-
LeetCode-21 合并两个有序链表
题目描述:思路想法: 新链表的首节点应该为两个旧链表中首节点较小的那个; while 循环依次比较两个链表节点的大小,将较小节点加入新的链表,该较小节点所在的旧链表更新为下一个节点; 循环直到其中一个链表的空节点,并判断是哪一个旧链表为空,将另一个旧链表作为新链表的结尾。Java 代码: /** * Definition for sin...原创 2019-05-13 08:40:19 · 199 阅读 · 0 评论 -
LeetCode-26 删除排序数组中的重复项
题目描述:思路想法: 其实这道题不难,但重要的是建立模块思维。 我们把原数组的每一个坑位当成一个模块,这个模块是我们需要一个一个的去填满的,而且要满足不重复; 另一个模块就是我们手中的袋子,这个袋子里装满了一个有序但重复的可用资源; 我们先把袋子里第一个元素填入第一个坑位,然后袋子里第二元素和刚刚填的元素比较,若相同,直接舍弃,若不同,放入第二个坑...原创 2019-05-13 08:57:53 · 193 阅读 · 0 评论 -
LeetCode-27 移除元素
题目描述:思路想法: 如果能够领会数组中的模块思想这道题就可以秒杀了; 我们把数组中每一个坑位都当作是必须被重新填的坑位,这是一个模块; 我们把原数组当成手中的袋子的资源;对于第一个坑位来说,我们要做如下判断,1.袋子里的第一个元素是不是要删除的元素; 是的话直接舍弃这个元素,考虑第二个资源元素;不是的话填入坑位; 同样,考虑第二个坑位,这...原创 2019-05-13 09:13:01 · 195 阅读 · 0 评论 -
LeetCode-35 搜索插入位置
题目描述:思路想法: 无疑是利用二分查找了,但是,当一个不存在数组中的元素,应该如何确定它在数组中的位置呢? 二分法在跳出循环时,说明这个元素没有在数组当中,但是,在跳出来之前,left和right即为相邻的元素; 当用target目标元素和mid比较的时候,target比中间的大应该选没跳出循环时的右边,否则选左边作为插入位置。Java 代码:cl...原创 2019-05-13 09:27:54 · 276 阅读 · 0 评论 -
LeetCode-69 x的平方根
题目描述:思路想法:暴力求解法,从 0 - x/2+1 我们从小到大遍历每个数,看看有哪个数是满足 k*k==x 返回 k ; 或者k*k>x && (k-1)*(k-1)<x 返回k-1;复杂读O(n); 但是要注意 k*k 可能会溢出;使用 long 代替 int ; 或者 使用变相的判断 k == x/k;二分查找的方法:本题是满足二分查找...原创 2019-05-22 12:01:01 · 329 阅读 · 0 评论 -
LeetCode-70 爬楼梯
题目描述:思路想法:这道题,用递归无疑是最不费脑子的。假设现有 10个台阶,我最后可以走1步,也可以走2步;走1步的话递归9个台阶;走两步递归8个台阶;但是提交发现超时了。这个时候当然是动态规划的阉割版啦;用hash表保存下记录嘛,省的每次都傻乎乎的去递归;Java 代码:class Solution { public int climbStairs(...原创 2019-05-22 12:13:09 · 396 阅读 · 0 评论 -
核心技能点-二分查找
二分是针对一个有序的数组中的查找,每次搜索都可以将搜索空间减半;效率可见一斑。但是,写出一个不出bug,简洁,优雅的代码并不容易,接下来,我们来分析一下:中间下标:mid对于一个数组来说,比如:[1, 4, 5, 6] 或 [1, 4, 5, 6, 7] 我们定义中位数有两种:第一种为 下中位数:(length-1)/ 2;第二种为 上中位数:length / 2;...原创 2019-05-13 11:28:18 · 611 阅读 · 0 评论 -
LeetCode-53 最大子序和
题目描述:思路想法:我们可以从头开始遍历,仍然是数组模块的思想,把遍历指向的当前元素和已经形成的子数组分成两个模块A,B(注意:B模块初始为空);我们只需要考虑:什么时候舍去B模块的这个大尾巴;在加入A模块时,新的B模块是否大于0;大于0就加入,否则不该加入A。并且B模块在此发生断裂,这时我们需要记住B模块存在过的最大值,然后,继续往后遍历。最后我们得到了很多个 B 模块的最大值,...原创 2019-05-17 17:31:08 · 323 阅读 · 0 评论