- 更新记录
- 20210903 刷题也太枯燥了啊,最近一个月又开始了每天1道或者2道的节奏,发现还是过一段时间不刷,就不会做,我的妈呀
- 20210727 剑指offer 重新刷完一遍
- 20201127 重新开始刷题
- 20201102 欠刷题N道,忙
- 20201019 欠刷题 13道
- 20201016 欠刷题17道, :–(
- 20201012 欠刷题13道,上周有紧急的事情
- 20201009 欠刷题11道,重新开始补咯
- 20200929 欠刷题11道,正在补
- 20200928 已经欠了9道题了,天呐,这几天
- 20200817 lt都更新在 链接,除双休外每天2道
- 不定期更新,每天两道LeetCode题,周末不固定,周末更想做自己的事情
- 2020-10-09
- 74: 二维数组中查询值: 从右上角开始即可,<target 则向下移动,>target则向左移动
- 75: 一维数组排序: 解决方法: 既然只有0,1,2 则直接map存储次数即可,最后for 循环赋值即可
2020-09-18
- 1171 : 删除 和 值为0的元素 ,既然 1+2=3 与-3 相抵,所以 1,2,-3 都删除
- 解决思路: 参考的大佬的,tql,map 存储 该节点的和,如果出现重复的删除该区间的即可
- 1367: 判断链表是否在树中:
- 解决思路: dfs 对每个子树进行判断节点是否与list 相符合
- 坑: 主要要先判断 list 是否为空才可以
- 解决思路: dfs 对每个子树进行判断节点是否与list 相符合
- 2020-09-14
- 147: 链表做直接插入: 当找到不符合条件的节点之后,直接从头开始遍历即可
- 237: 删除节点: 没意思的题目
- 328: 奇偶链表: 双指针,一个代表奇数,一个代表偶数,最后偶数添加到奇数末尾即可
- 2020-09-10
- 61 链表反转,关键在于当成环,找新的head节点(n-(k%n))和尾巴节点(n-(k%n)-1)
- 108 有序链表转换为伪平衡二叉树 ,关键在于 哪个节点作为根节点,因为有序所以选择中间节点作为根节点,再分治法即可
- 2020-09-09
- 114 二叉树转为链表 : 核心规律,就是 左子树到右子树的位置,右子树到原先左子树的最右子树的右孩子
- 116 平衡二叉树填充next 节点: BFS解决 | 通过递归+根节点的next(从题目找出规律即可)
- 2020-09-08
- 112 pathSum & 113 pathSumII
- 递归 dfs 解决
-
2020-09-07
- 2020-09-04
- 7: z 字打印字符串 (
通过flag正负数变化可以实现 1->2->3->4...->n->n-1>-n-2..>1
) - 105 先序中序构建二叉树(
递归实现:注意i+1即可
)
- 7: z 字打印字符串 (
Array
- 2020-02-12
- 2 Two Sum Num
- 26 Remove Duplicates Num
- 2020-02-13
- 27 Remove Element
- 35 Search Insert Position Num
- 2020-02-14
- 53 Maximum Sub Array Num
- 66 Plus One:
- 2020-02-15
- 88 Merge Sorted Array
- 118 Pascals_Triangle
- 2020-02-16
- 119 PascalsTriangleII
- 121 Best Time to Buy and Sell Stock
- 2020-02-17
- 122 Best Time to Buy and Sell Stock II
- 167 Two SumII Input array is sorted
- 2020-02-18
- 169 Majority Element
- 189 Rotate Array (这题考虑背了)
- 2020-02-19
- 217 Contains Duplicate
- 219 Contains Duplicate II
- 2020-02-20
- 243 Shorted Word Distance
- 268 Missing Number
- 2020-02-21
- 283 move zeroes
- 414 third maximum number
LinkedList
- 2020-02-22
- 21 Merge Two Sorted Lists
- 83 remove duplicates from sorted list
- 2020-02-23
- 141 Linked List Cycle
- 160 Intersection of Two Linked Lists
- 2020-02-24
- 203 Remove Linked List Elements
- 206 Reverse Linked List
递归实现与循环实现是一模一样的思路,就是先保存下一个节点, 然后当前节点重新指向前一个节点 然后先移动前一个节点到当前节点, 因为对next而言,它的prev就是cur节点, 然后cur节点移动到下一个节点作为新的cur节点
- 2020-02-25
-
234 palindrome-linked-list
卡在限制条件上,O(n)时间复杂度,O(1)空间复杂度
最后,似乎只能快慢指针加上反转实现public boolean isPalindrome(ListNode head) { if (null == head) return true; ListNode fast = head.next; ListNode slow = head; while (fast != null && fast.next != null) { fast = fast.next.next; slow = slow.next; } if (null != slow) { slow = slow.next; } slow = reverse(slow); fast = head; // 进行判断 while (slow != null && fast != null) { if (slow.val != fast.val) { return false; } slow = slow.next; fast = fast.next; } return true; } private ListNode reverse(ListNode head) { ListNode cur = head; ListNode prev = null; while (cur != null) { ListNode next = cur.next; cur.next = prev; prev = cur; cur = next; } return prev; }
-
237 Delete Node in a Linked List
stupid problem
-
- 2020-02-26
-
876 Middle of the Linked List
-
利用快慢指针,当快指针走到末尾的时候,慢指针刚好走到中间位置 ,既 index>>1 的位置
public static ListNode middleNode(ListNode head) { if (head == null) return null; ListNode fast = head.next; ListNode slow = head; int linkCount = 2; while (true) { if (fast == null) break; if (fast.next == null) { linkCount += 1; break; } fast = fast.next.next; slow = slow.next; if (fast != null) { linkCount += 2; } } if (linkCount % 2 == 0) { return slow; } return slow.next; }
-
-
- 1290 Convert Binary Number in a Linked List to Integer
-
可以通过反转再根据byte数组的形式实现,获取长度即可
-
大神的思路: 直接用或运算即可 ,其实不需要考虑 (1<<i) ,
关键是 这个val的值要么为0,要么为1
,所以我们可以直接通过| 运算构建出这个 0,1数组public int getDecimalValue(ListNode head) { int ans = 0; while (head != null) { ans = (ans << 1) | head.val; head = head.next; } return ans; }
public static int getDecimalValue(ListNode head) { head = reverse(head); int c = 0; int v = 0; while (head != null) { v += head.val * (1 << c); head = head.next; c++; } return v; } private static ListNode reverse(ListNode head) { ListNode cur = head; ListNode prev = null; while (cur != null) { ListNode next = cur.next; cur.next = prev; prev = cur; cur = next; } return prev; }
-
String
-
2020-02-27
-
13 Roman to Integer
- 不是很喜欢这种题
- for循环遍历匹配即可
-
String_14_Longest_Common_Prefix
-
这题没思路,一直卡在,以为需要自己造轮子,感觉这个轮子好复杂,然后发现可以直接用String.indexOf来逐个
- 判断即可
- 也有陷阱,陷阱在题目上,是前缀,不是包含,所以要indexOf==0来判断
-
-
-
2020-02-28
- String_20_Valid_Parentheses:
- 判断是否是成对出现,类似于判断是否是回文
- 用栈即可
- 28_Implement strStr:
- 卡了,实现自带的String api :indexOf
- 注意边界条件:
- 为空
- hayStack长度小于needle
- 本质是不停的subString然后进行比较
- String_20_Valid_Parentheses:
-
2020-02-29
- String_58_Length_o_ Last_ Word
- 获取最后一个单词的长度
- String_67_Add_Binary_
- 字符串形式的二进制相加然后返回字符串形式的二进制
- String_58_Length_o_ Last_ Word
-
2020-03-01
- String 125 Valid Palindrome
- 陷入了与链表的思路,先获取到slow和fast,然后slow反转再进行判断,但是却忘记了String自带api,可以从后往前,而不是单链表
- String 157 read n characters given read4
- 判断调用read4是否返回4即可
- String 125 Valid Palindrome
-
2020-03-02
- String_344_Reverse_String
- 反转字符串,基于数组的特性,直接按照下标交换即可
- String_345_Reverse_Vowels_of_a_String
- 交换元音字母(既a,e,i,o,u和A,E,I,O,U)
- 一左一右移动匹配即可
- String_344_Reverse_String
-
2020-03-03
- 对于字符串,如果需要
遍历
并且统计次数
的情况,则可以充分考虑26个字符这个潜在条件:既申请长度为26的字符数组,按照字符序进行排序
- String_383_Ransom_Note
- 判断ransom是否可以由magazine中的字符组合而成,换句话说可以认为是排列组合的问题,没有顺序的划分
- 解题关键在于: 为字符串,因此可以申请长度为26的字符数组,该字符数组的value代表重复次数,最后在for循环即可
- String_387_First_Unique_Character_in_a_String
- 获取字符串中,不重复的最小下标值
- 同理,面对需要for循环遍历的字符串,可以重复
- 对于字符串,如果需要
-
2020-03-04
-
String_415_Add_Strings
-
思路就是对字符串的所有值进行相加,字符串有长短之分,因此为了避免,短的到了末尾之后 用0来代替 这题忘了,对于字符串相加转数字是由套路的,/10 和%10 当一个数不停的除以10: 如 12345 不停的除以10 得到的结果是: 1234,123,12,1 当一个数不停的模10的时候: 如 12345 不停的模10
-
-
String_434_Number_of_Segments_in_a_String
-
什么时候统计次数会+1: 当该字符不为空,同时上一个字符为空,代表着是一个新的单词,则++
-
-
-
2020-03-05
- String_443_String_Compression_背
- 题目刚开始理解不了,并且这题感觉并不是easy题
- String_459_Repeated_Substring_Pattern
- 刚开始也是没思路
- String_443_String_Compression_背
特殊原因,刷题不知道哪日恢复恢复,人生大事
-
2020-03-09
- 443 String Compression
- 题目刚开始理解不了,并且这题感觉并不是easy题
- 459 Repeated Substring Pattern
- 刚开始也是没思路
- 核心的就这几点:
- 必然是 子串长度*n个=字符串长度l
- 443 String Compression
-
2020-03-10
- 520_Detect_Capital
- 判断是否是特殊的词
- 内置api快速解决
- 521_Longest_Uncommon_Subsequence_I
- 最开始没理解题意,搜了看了一段时间才明白,只是一道类似于判断长度的题,
stupid
问题
- 最开始没理解题意,搜了看了一段时间才明白,只是一道类似于判断长度的题,
- 520_Detect_Capital
- 2020-03-12 今天开始,重新恢复刷题
-
2020-03-12
- String_541_Reverse_String_II
- 有点类似于数学题,唯一需要注意的就是
下标的移动,以及关于限制条件: 小于k 和[k,2k]之间的数据
- 有点类似于数学题,唯一需要注意的就是
- String_551_Student_Attendance_Record_I
- 好傻的一道题,没做,直接算是跳过的那种
- String_541_Reverse_String_II
-
2020-03-13
-
String_557_Reverse_Words_in_a_String_III
-
简单的split之后遍历反转加拼接即可
-
String_606_Construct_String_from_Binary_Tree
-
* 刚开始题意没有理解, 需要注意的就是当左右都为空的时候, 这个限制条件直接插入空的即可 * 4种情况: * 1. 左右都为空,此时直接返回即可 * 2. 左为空,右不为空,根据先序的规则: 根左右,所以需要 先加上() * 3. 左不为空,但是右为空: 则 根据题意,此时直接(+left+) * 4. 左右都不为空: 则 ( + left + ) + ( + right + )
-
-
-
2020-03-14
- Tree_110_Balanced_Binary_Tree
- Tree_637_Average_of_Levels_in_Binary_Tree
-
2020-03-15
-
Stack_682_Baseball_Game
* @Detail 1. 就是看题意解题这种即可,但是被局限于tag 了,既然是stack的标签,因此一直在纠结stack如何实现 * 其实用队列是最快的,或者说不是队列,而是可以通过下标获取元素的数据结构即可 * @Attention: 1. linkedlist用peek 而不是用get,原因在于,get会抛出错误,而peek并不会,只会返回null
-
Stack_844_Backspace_String_Compare
-
1. 利用两个栈来取消字符即可
-
-
Stack
-
2020-03-16
-
Stack_232_Implement_Queue_using_Stacks
-
* @Detail 两个栈实现队列 * 栈为先进后出,而要做到先进先出,需要有一个stack专门push,另外一个stack专门pop * @Attention: 注意点就是, push的时候要把out的全部移过来, 保证顺序, pop的时候要把in的全部移过来
-
-
Stack_225_Implement_Stack_using_Queues
-
* @Detail 时刻保持一个队列为空, 另外一个队列有数据即可 * @Attention: 遇到一个坑, 就是当遍历的时候, 采用的是q1.size ,但是当poll的时候,却忽略了size会变
-
-
-
2020-03-17
-
Stack_155_Min_Stack
-
1. 唯一需要注意只有条件中的,以O(1)的时间查找到最小值,意味着需要保存下标或者是最小值
-
-
Stack_496_Next_Greater_Element_I
* 1. 既 sum1 中的元素为sum2中的子元素 * 2. 除元素需要大于sum1中的外并且sum2中的下标也需要大于sum1中的下标 * 3. 并且这个元素需要为 大于这个元素的最小值 * <p> * 并不是存储下标,而是直接存储这个值,也并非是大于这个元素的最小值,大于它的第一个值即可 * @Detail 1. 最简单的方式是直接2个for循环一个一个匹配 * 题目没搞懂 * 存储的不是下标,是元素,但是这道题难度不应该是easy 而应该是medium * 未解决
-
``
-
2020-03-18
-
Stack_1021_Remove_Outermost_Parentheses
-
* 去除最外层的括号对 * @Detail 没思路 * 看了别人的其实好像挺简单的,核心就是根据要求,既然 () 是成对出现的,则意味着最终 ( 和 ) 的数量会一致
-
-
Stack_1047_Remove_All_Adjacent_Duplicates_In_String
-
移除相连的元素, * @Detail 题目没理解, 刚开始理解为删除直至成为回文字符串, 并不是, 而是一直不停地删除, 知道剩下的元素不是相同的 * 1. 解题思路就是很明确,用栈,如果与之前的相同,则把之前的弹出(此时栈中还存着以前的数据,并且题目要求相邻)
-
-
-
2020-03-19
-
Queue_346_Moving_Average_from_Data_Stream
-
初始化一个滑动窗口,大小为w,输入一系列数, * 求窗口内的平均数,窗口会向前滑动,当窗口填满时,将最早进入的数弹出,加入新的数. * 然后对余下的数作平均值计算即可
-
Queue_933_Number_of_Recent_Calls
``` * 题目没看懂 * 既统计值在[t-3000,t]范围内的次数 ```
-
-
2020-03-20
-
HashTable_299_Bulls_and_Cows
* 既然数字在0-9 ,所以可以定义一个int[10]的数组, index对应的值则为是否存在,secret ++ <0 代表 guess中存在这个值 * guess-- >0 代表secret中存在这个值
-
- 2020-03-20 16:52 刷题取消一段时间
- 2020-04-01 16:33 刷题暂时缩减到每天1道,有其他安排~
HashTable
-
2020-04-01
-
HashTable_204_Count_Primes
-
求质数,方法就是笨一点的类乘,如果值在n范围内,则说明那个值不是质数
-
-
-
2020-04-02
- HashTable_136_Single_Number
-
返回只出现一次的元素 巧妙利用 `异或`运算符 : 相等的话则值为1否则为0 => 0 ^ 2 ^ 1 ^ 4 ^ 5 ^ 2 ^ 4 ^ 1 => 0^ 2^2 ^ 1^1 ^ 4^4 ^5 => 0 ^ 0 ^ 0 ^ 0 ^ 5 => 0 ^ 5 => 5 :)
-
2020-04-03
-
HashTable_202_Happy_Number
-
核心只有: 如何将一个数按位数拆分: 789-> 7,8,9 while (n > 0) { remain = n % 10; squareSum += remain * remain; n /= 10; }
-
-
-
2020-04-04
-
HashTable_205_Isomorphic_Strings
-
解题的关键就是需要记录 字符与下标的关系,并且同一个字符下标要保持不变 所以可以使用map或者数组(因为ascii有256个字符)
-
-
-
2020-04-07
-
HashTable_242_Valid_Anagram
-
1. 排序 ,然后一个一个匹配即可 * 2. 两个for循环遍历匹配 * 3. 基于字符串的特性,判断是否包含,可以通过一个++ 一个-- 的形式 最终判断
-
-
-
2020-04-08
-
Top100_Easy_70_Climbing_Stairs
-
动态规划题,并且不应该是easy题
-
-
-
2020-04-09 : 项目繁忙,没时间写
-
Too100_Easy_198_House_Robber:
- 动态规划问题,dp 一直很弱
-
2020-04-11: 刷到树相关的题了,最近要先复习树了
-
2020-09-04:
- 100 same tree
- 101 Symmetric Tree 与100相似的题型,直接分治法即可