- 博客(14)
- 收藏
- 关注
原创 Mar5 -- Grind75
1. 3Sum -- 15hint: If we fix one of the numbers say x, we are left with the two-sum problem at hand! For the two-sum problem, if we fix one of the numbers, say x, we have to scan the entire array to find the next number y, which is value - x where value is
2024-03-06 06:02:23
704
原创 Mar4 - Grind75
不停的redefine newInterval,同时用Math.min去确定最小,用Math.max去确定最大。-> while(newInterval[1] >= intervals[index][0]) 一直找区间比较。当newInterval[1] < intervals[index][0]停止loop。第一种情况:当intervals[index][1] < newInterval[0]这种情况下,不会有任何重叠,直接把之前所有的都加到ArrayList里面。第二种情况:有重叠!
2024-03-05 13:45:36
169
1
原创 Feb26--Grind 75
最暴力的方式--都square了以后在sort,Time Complexity O(n logn) -> sorts takes O(n logn) and square takes O(n)如果没有0,那整个array就没有变,有0就replace到0的位置,后面再加上就好了。[[7,10],[2,4]]这个例子是可以的,如果按照current_start和previous_end比较的话,结果会是错的。一开始想的很简单,只要去比较current_start和previous_end就可以了。
2024-02-27 07:20:44
208
原创 Feb22/23--Grind75
主要思路是,因为A majority element occurs in more than half the indices in an array.先用了HashMap,time complexity是O(n). space complexity是O(n).如何用一个loop解决问题?看看有没有更省空间的做法。
2024-02-27 04:35:35
241
原创 Feb20--Grind 75
2.不需要去判断isBadVersion(middle-1) == true因为最后left和right会相等落在true那里,return其中一个就好。1. 应该是left = middle-1而不是left = middle。left = middle会造成infinity loop因为left一直是一样的,middle不变。所以middle = (left+right)/2 在java是保证正确的,应该用middle=left + (right - left) / 2。
2024-02-22 05:30:03
329
1
原创 代码随想录算法训练营十一天| 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值
【代码】代码随想录算法训练营十一天| 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值。
2023-06-22 21:21:40
41
1
原创 代码随想录算法训练营十天| 232.用栈实现队列,225. 用队列实现栈
【代码】代码随想录算法训练营十天| 232.用栈实现队列,225. 用队列实现栈。
2023-06-22 16:52:28
36
1
原创 代码随想录算法训练营八天 | 344.反转字符串,541. 反转字符串II,剑指Offer 05.替换空格,151.翻转字符串里的单词,剑指Offer58-II.左旋转字符串
主要要理解为什么在for loop里面是i+=2k,以及确定end的逻辑是什么。在这里的话我们需要换到的位置为start + k - 1,没有到那么长的话,就都换。Code1:直接复制数组,碰到空格就用%20替代。344:主要运用了双指针,调换前后。主要学到如何不多用空间去做这道题。剑指offer 58。
2023-06-18 11:29:50
29
1
原创 代码随想录算法训练营第四天| 24. 两两交换链表中的节点,19.删除链表的倒数第N个节点,160.链表相交,142.环形链表II
19: 第一个思路大概就是用length-n算出到底要remove哪一个index的数值然后再用正常的remove, 但是发现只给了head,没办法找到length。看了提示之后发现要用两个pointer,于是想出来一个pointer先走n,然后两个在一起移动,直到先移动的pointer.next == null。24: 第一眼看没什么思路,就直接去看文档了,主要掌握的知识是如何设置虚拟节点,这样非常方便操作。只需要设置一个新的Node,然后把他放到head的前面,就算是新的虚拟节点了。
2023-06-13 18:09:16
155
1
原创 代码随想录算法训练营七天|454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和
运用hash数组的逻辑,第一步hash[]里面存ransomNote里面出现字母的次数,然后再loop一遍magazine的字母,然后在每个位置上-1。如果hash[]里面有位置的number是>0的,就证明ransomNote里面有字母是在magazine里面没有的,要return false。主要思路是在记录前两个数组中数字的和,放进hashmap,key和value一个记录和,另外一个记录次数。同样,一会碰到sum5, sum6,都是在里面多叠加一个for loop。只是要注意一些细节。
2023-06-13 18:04:55
25
1
原创 代码随想录算法训练营第六天| 242.有效的字母异位词,349. 两个数组的交集 ,202. 快乐数 1. 两数之和
然后把nums1和num2的数字分别放进去,然后去看set2里面有没有contain set1的数字,有的话就加进finalist。主要学会如何使用Hashmap,先取一个数,然后在hashmap里面找有没有target减去那个数的值,如果有,直接填进result。然后在nums2里面找,如果位置已经有1,就变成2。最后循环hash,如果hash[i]==2,那就证明有重复,加入result。重要的点是要定义一个新的method,去找下一个number,而这里return的是这个数的digit平方后的数。
2023-06-12 21:12:30
53
原创 代码随想录算法训练营第三天| 203.移除链表元素, 707.设计链表, 206.反转链表
Code: 掌握了双指针的思路,不需要在建一个linked list消耗内存,只需要用previous 和 current调转就好。重点是如何初始化previous!主要是学习了如何使用一个虚拟点(temp),这样不需要单独写一段来看最开始的节点是不是等于val。暂时还没有用虚拟node(后面再研究一下)
2023-06-09 18:36:12
320
原创 代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
然后去看视频讲解,理解了双指针的思路--最大值一定在两端,所以只要看左边和右边的哪个更大,就放进新的array里面,然后相应的指针移动。在写的过程中,一直在想如何在原本的array里面swap,卡在这里。主要思路为:定出Bottom, Top, Left, Right,然后每完成一个阶段的填空,有一个变量要相应的变化。977: 第一眼看题思路是暴力解法:先把里面的数字都平方,然后再用sorts功能(两个for loop),很快就写出来,但是感觉不是最优解。总结:先看视频解析,然后自己写,重点是搞清楚方法。
2023-06-08 23:13:12
437
1
原创 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
重新读了第一种写法以后,发现当(nums[middle] > target)时,middle - 1是漏掉了。第一眼看到题目感觉不难,但是发现需要用到O(logn),有点忘记怎么写才会达到这一种runtime complexity。最后看了解析,用了两个for loop,成功。然后学习如何使用双指针法,卡在第二个例子,总是output [0,1,0,0,3],4不见了。最后我又删掉了第一遍所写的code,重新写了一遍,重新回顾每一个点。的讲解,理解了binary search是怎么操作的。
2023-06-07 17:49:06
622
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人