楼主: floydc
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 【自我鼓励帖】1月9号脸家实习二面前的刷题日记

🔗
DenHar 2018-1-2 13:09:27 | 只看该作者
本楼:
全局:
感觉有戏!
回复

使用道具 举报

🔗
水锦鲤 2018-1-3 06:42:32 | 只看该作者
本楼:
全局:
同关注!
回复

使用道具 举报

🔗
sparrow52 2018-1-3 06:58:52 | 只看该作者
全局:
哇楼主真的好厉害!感觉一天刷的题很多。。。加油~!
回复

使用道具 举报

🔗
 楼主| floydc 2018-1-3 09:01:25 | 只看该作者
全局:
sparrow52 发表于 2018-1-3 06:58
哇楼主真的好厉害!感觉一天刷的题很多。。。加油~!

谢谢,一起加油!
回复

使用道具 举报

🔗
 楼主| floydc 2018-1-3 13:18:26 | 只看该作者
全局:
介于FB tag已经基本刷完,而且刚好也上了20道,现在距离二面也只有一周了,所以现在基本上以分析、总结、归类为主,遇到某个类型的相似题目,可以顺便刷一刷

integer to roman / roman to integer
* 13. Roman to Integer (easy)
    * 从index 0到length-2
        * 如果current char >= next char, sum+= current
        * 如果current char < next char, sum -= current
    * 一个table对应roman 和 integer
* 12. Integer to Roman (medium)
    * return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10];
    * M是千,C是百,X是十,I是一
* 273. Integer to English Words (hard)
    * 像这个系列的题一样,得有一个table或者几个list去存数字到英文的值,本题中存三个list,**注意不包含"zero",因为“zero”是特殊情况,只有当数为0的时候才会用到**
        * 小于二十: 1~19
        * 十: 10~90
        * 千: 1000, 100,000, 100,000,000
    * 因为这个方法是O(1)的,所以不需要用StringBuilder
    * 在主方法里面检查thousands
    * 在helper方法里面检查小于二十,十和百(加上"Hundred”)

add two (string/binary/number)
* 67. Add Binary (easy)
    * 首先run time不是O(1),而是linearly related to the size of two input strings, 所以用StringBuilder
    * 从右往左加
    * 这种"add"类的题目,都需要存一个**carry**, 一个**sumOfCurrentDigit**
        * 每次iteration开始时,`sumOfCurrentDigit = carry`
        * 每次iteration中,`sumOfCurrentDigit += digit1 和 digit2`
        * result的`currentDigit = sumOfCurrentDigit % radix(进制)`
        * `carry = sumOfCurrentDigit / radix(进制)`
* 2. Add Two Numbers [linkedlist] (medium)
    * 思路和67 add binary基本一致
    * 每次iteration中,sumOfCurrentDigit += digit1 和 digit2
    * 每次iteraton结束之前
        * result的currentDigit = sumOfCurrentDigit % radix(进制)
        * carry = sumOfCurrentDigit / radix(进制)
    * 因为要新建一个LinkedList,所以需要新建一个dummy,然后node = dummy,最后return dummy.next
* 445. Add Two Numbers II (medium)
    * 和2. add two number的区别是most significant digit comes first,这样的话在建dummy的时候,建成null即可,然后每次都新建一个newHead,让newHead.next = dummy;同样最后还要check一下sum是否为1,如果是1的话,再加一个val为1的newHead
* 415. Add Strings (medium)
    * 和67. add binary基本一样,只是换了进制而已
* 43. Multiply Strings (medium)
    * num1[i] * num2[j] will be placed at indices [i + j, i + j + 1]
    * if(sb.length() != 0 && p != 0) sb.append(p),这样能够把开头的0去掉

subarray
* 325. Maximum Size Subarray Sum Equals k (medium)
    * sum list, hash map,思路类似two sum
* 1. Two Sum (easy)
    * hash map
* 209. Minimum Size Subarray Sum (medium)
    * 2 pointer: O(n)
        * 用start和end创造一个subarray的window
        * start = 0, end = 0, min = Integer.MAX_VALUE, sum = 0
        * `while (end < nums.length)`
            * 正常情况下sum < k,这时候end++, 更新sum: sum += nums[end]
            * 如果sum >= k了,那么start++, 更新sum: sum -= nums[start]
    * binary search : O(nlgn),其中binary search是O(lgn), helper method是O(n)
        * 用一个helper叫windowExists的方法,把主方程里的mid当成size来搜索

substring (sliding window)
* 209. Minimum Size Subarray Sum (medium)
    * 2 pointer: O(n)
        * 用start和end创造一个subarray的window
        * start = 0, end = 0, min = Integer.MAX_VALUE, sum = 0
        * `while (end < nums.length)`
            * 正常情况下sum < k,这时候end++, 更新sum: sum += nums[end]
            * 如果sum >= k了,那么start++, 更新sum: sum -= nums[start]
* 76. Minimum Window Substring (hard) 【不用hash map的方法,用hash map的话更具有普适性】
    * two pointers: start and end to represent a window.
    * Move end to find a valid window.
    * When a valid window is found, move start to find a smaller window.
    * 不要用hash map存pattern的char,用int[128]就行了,因为unicode 0~127就包含了基本的拉丁字母和符号了,hash map反而更复杂

    * map里存的是window中待include的char的数量
    * counter: the number of chars of pattern to be found in text
    * (while end < text.length())从end = 0 到 text.length()扫描:
        * if 扫描的endChar对应map的值>0,将它的值-1, counter--
        * 让map里对应的endChar的value-1,(map中对应的char如果是pattern的char,不会<0,如果不对应则会<0)
        * end++,相当于window变大,所以待include的数量减少
        * (while counter == 0),说明在这个[start, end]区间内有一个valid window
            * update minLength与minStart
            * 让map里对应的startChar的value+1,(如果map里对应的char是pattern的char,此时它的数量会>0)
            * if 该value > 0, counter++
            * start++,相当于window变小,所以待include的数量增加
* 159. Longest Substring with At Most Two Distinct Characters (hard)
    * 套用substring类的题目的模板
    * 区别是,因为只有text,没有pattern,往map里put的时候,可以放在第一个while loop里面
    * if (map.get(c1) == 1) counter++; // new char
* 340. Longest Substring with At Most K Distinct Characters (hard)
    * 159的follow-up
    * 把159中的`while (counter > 2)`换成`while (counter > k)`就好了
* 3. Longest Substring Without Repeating Characters (medium)
    * 思路同159,340,只需要换三行就行了
        * if (map.get(c1) > 1) counter++; // 把之前的 == 1 换成 > 1
        * while (counter > 0) { // 换成 > 0
            * if (map.get(c2) > 0) counter--; // 换成 > 0
* 438. Find All Anagrams in a String (easy)
    * sliding window,基本同76一样,只需要改一点点
* 30. Substring with Concatenation of All Words (hard)
    *
meeting rooms & intervals
* 252. Meeting Rooms (easy)
    * use lambda expression to sort the intervals by start time
    * start time at index i should be no less than end time at index (i+1)
* 253. Meeting Rooms II (medium)
    * 找到最少需要几个meeting room
    * 方法一:分别sort start time和end time
        * loop over starttime list,需要两个var: rooms, endTimePointer
            * 每当startime[i] < endTime[endTimePointer], rooms++ 【starttime[i]是新的meeting, endTime[endTimePointer]是旧的meeting】
            * else endTimePointer++
    * 方法二:sort start time,用min heap存end time
        * loop over intervals (with sorted start time)
            * 如果intervals[i].starttime >= interval_polled.endtime【intervals[i].starttime是新的meeting, heap.poll()是旧的meeting】,这时需要merge end time: interval_polled.end = intervals[i].end
            * else heap.offer(intervals[i]);
            * heap.offer(interval_polled)
* 56. Merge Intervals (medium)
    * sorting
    * make a new list, compare sorted intervals with new list and do merging
* 57. Insert Intervals (hard)
    * 把所有endtime < newInterval.starttime的interval加到result中
    * 把所有overlapping intervals和newInterval merge成一个新的newInterval,替代之前的newInterval,加到result中(用较小的starttime和较大的endtime)
    * 把其他starttime > newInterval.endtime加到result中去

heap
* 23. Merge K Sorted List (hard)
    * heap,对于stream,或者一直改变的structure的sorting,用heap,本题中每个list都在不停的改变
    * 对所有的node : lists,如果node不为null,就offer到heap上
    * while (heap不空)
        * append heap.poll()的第一个node到tail上,在把第二个node开始(即tail = tail.next之后的tail.next)offer到heap上
*
回复

使用道具 举报

🔗
 楼主| floydc 2018-1-4 16:00:07 | 只看该作者
全局:
01.03.18
今天主要看面经题和他们的follow-up了, 还没总结完,明天来更新
回复

使用道具 举报

🔗
 楼主| floydc 2018-1-6 10:26:53 | 只看该作者
全局:
01.14.18
太累了,睡了一天

01.15.18

12:12
看面经remove invalid parentheses

12:43
面经find first different node by preorder traversal

1:14
find k closest points

1:27
friend recommendation: bucket sort
mutual friend: hash set

2: 30
k sum: dp, backtracking

3: 30
linked list with random peek and pop

4:00
longest arithmetic subsequence

5:19
longest crossing road / bomb enemy

5:45
longest path in binary tree

6:02
mine sweeper

6:05
monotonous array

6:15
most frequent character in an array

6:20
power mod

6: 30
next permutation / previous permutation

7:13
print all path in 2d board

7:28
random subset of size k, 用reservoir sampling

8:23
reader writer problem

8:44
run length encoding

8:57
remove island below area k

9:10
sort transformed array, 对sorted array的数字平方后排序

9:36
subarray sum

9:49
睡觉了

12:57
起床吃饭

13:57
task scheduler

14:45
return random non-empty slot

15:17
开始复习leetcode 的facebook tag

弄了一下github

16:10
move zeroes and follow-up

16:17
regular expression matching & wildcard matching
真的难,没太弄懂,之后再研究研究

17:56
binary tree level order traversal

18:11
吃饭

19:05
binary tree vertical order traversal

19:22
best time to buy and sell stock

19:45
valid_palindrome

19:51
clone graph

20:16
copy list with random pointer

20:21
困了,准备睡觉了

今日总学习时间:15小时

总结:把面经基本上看完了,也在继续复习tag了,争取明天复习完第一遍tag

回复

使用道具 举报

🔗
 楼主| floydc 2018-1-7 13:38:42 | 只看该作者
全局:
010618

6:00
吃早饭

6:10
copy list with random pointer

6:24
word break

8:17
reverse words in a string

8:35
maximum product subarray

8:50
one edit distance

9:30 休息一下

10:00
one edit distance

10:50
letter combination of a phone number

11:18
binary search tree iterator

11:29
吃饭

1:10
number of islands

2:10
add binary

2:32
sort colors

3:06
reverse linked list

3:52
休息一下

6:58
word dictionary

7:17
implement trie

7:25
kth largest element in an array

7:40
maximal square

8:10
maximal rectangle

8:23
maximal rectangle,真的难

8:35
largest rectangle in histogram

9:09
lowest common ancestor of a BST

9:30
休息

10:27
meeting rooms II

10:59
一亩三分地

11: 20
binary tree paths

11:39
休息


回复

使用道具 举报

🔗
yiming6 2018-1-8 13:49:23 | 只看该作者
全局:
[借楼] 转让LeetCode账号,一年Premium会员,到明年1月6号,原价159,现在只要120。全部题库,高频题目,模拟面试,LeetCode官方答案和解析唾手可得,Google MicroSoft FaceBook Amazon 指日可待!

详情联系:微信 UWyiming6
                邮箱 eamonge.921212@gmail.com
回复

使用道具 举报

🔗
 楼主| floydc 2018-1-8 14:26:22 | 只看该作者
全局:
010718

12:03
meeting rooms

12:49
binary tree paths

13:06
graph valid tree

14:07
integer to english words

14:15
find celebrity

14:29
first bad version

14:48
Implement strStr()

15:48
吃饭

16:37
Expression Add Operators

17:18
Inorder Successor in BST

18:00
divide two integers

18:17
Find Median from Data Stream

18:25
serialize and deserialize binary tree

19:02
Longest Increasing Subsequence

19:32
search in rotated sorted array

20:48
increasing triplet subsequence

8:52
吃饭

9:43
Longest Substring with At Most K Distinct Characters

10:00
combination sum

10:50
count and say

11:10
insert delete getRandom O(1)

11:15
decode strings

11:20
random pick index

11:32
multiply strings

11:39
group anagram

11:49
target sum
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表