Skip to content

Commit 5a04fad

Browse files
committed
第一份工作前最后更新
1 parent c240084 commit 5a04fad

18 files changed

+4463
-494
lines changed

TODO.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
# 计划
22

3-
- 然后是stack 和 dp
4-
- 图论到时候看看面试考吗
3+
- 然后是stack
4+
- 图论
5+
- 线段树
56

6-
- 剩下的慢慢补全
7+
- 剩下的零星题慢慢补全
78

89
之后就是看leetcode和剑指(如果还没找到工作的话)

Untitled.ipynb

Lines changed: 0 additions & 45 deletions
This file was deleted.

basic_algorithm/.ipynb_checkpoints/sort-checkpoint.ipynb

Lines changed: 1 addition & 214 deletions
Original file line numberDiff line numberDiff line change
@@ -391,221 +391,8 @@
391391
"metadata": {},
392392
"source": [
393393
"## 题目\n",
394-
"\n",
395394
"### [kth-largest-element-in-an-array](https://leetcode-cn.com/problems/kth-largest-element-in-an-array/)\n",
396-
"\n",
397-
"- 思路 1: sort 后取第 k 个,最简单直接,复杂度 O(N log N) 代码略\n",
398-
"\n",
399-
"- 思路 2: 使用最小堆,复杂度 O(N log k),排前k个最大的,数据流的思路,如果小于对顶直接不用加入,如果大于堆顶就将堆顶替换为该数字进行重排,最后堆顶就是我们想要的结果。\n",
400-
"\n",
401-
"- 思路 3:把整个数组建最大堆,然后按堆排序把最大的k-1个数挪后边,排序的思路\n",
402-
"\n",
403-
"- 思路 4:quick select\n"
404-
]
405-
},
406-
{
407-
"cell_type": "markdown",
408-
"metadata": {},
409-
"source": [
410-
"直接使用python原生库的思路"
411-
]
412-
},
413-
{
414-
"cell_type": "code",
415-
"execution_count": null,
416-
"metadata": {},
417-
"outputs": [],
418-
"source": [
419-
"class Solution:\n",
420-
" def findKthLargest(self, nums: List[int], k: int) -> int:\n",
421-
" return heapq.nlargest(k,nums)[-1]\n",
422-
" \n",
423-
"class Solution:\n",
424-
" def findKthLargest(self, nums: List[int], k: int) -> int:\n",
425-
" heap = []\n",
426-
" for num in nums:\n",
427-
" if len(heap) < k:\n",
428-
" heapq.heappush(heap,num)\n",
429-
" else:\n",
430-
" #heapreplace 删除当前堆中最小元素,然后加一个元素\n",
431-
" #heappushpop 是先推再删除最小元素,意味着有可能被删除的就是新推入的这个数本身, 应该用这种做法\n",
432-
" heapq.heappushpop(heap,num)\n",
433-
" \n",
434-
" return heap[0]"
435-
]
436-
},
437-
{
438-
"cell_type": "markdown",
439-
"metadata": {},
440-
"source": [
441-
"思路2"
442-
]
443-
},
444-
{
445-
"cell_type": "code",
446-
"execution_count": null,
447-
"metadata": {},
448-
"outputs": [],
449-
"source": [
450-
"# 单独分一个堆\n",
451-
"class Solution:\n",
452-
" def findKthLargest(self, nums: List[int], k: int) -> int:\n",
453-
" def minheapify(heap,root,len_heap):\n",
454-
" p = root\n",
455-
" while p*2 + 1 < len_heap:\n",
456-
" left = p*2 + 1\n",
457-
" right = p*2 + 2\n",
458-
"\n",
459-
" min_index = left\n",
460-
" if right < len_heap and heap[right] < heap[left]:\n",
461-
" min_index = right\n",
462-
" \n",
463-
" if heap[p] > heap[min_index]:\n",
464-
" heap[p],heap[min_index] = heap[min_index],heap[p]\n",
465-
" p = min_index\n",
466-
" else:\n",
467-
" break\n",
468-
" \n",
469-
" def build_heap(heap,k):\n",
470-
" for i in range(k-1,-1,-1):\n",
471-
" minheapify(heap,i,k)\n",
472-
" \n",
473-
" min_heap = nums[:k].copy()\n",
474-
" build_heap(min_heap,k)\n",
475-
" \n",
476-
"\n",
477-
" for num in nums[k:]:\n",
478-
" if num <= min_heap[0]:\n",
479-
" continue\n",
480-
" elif num > min_heap[0]:\n",
481-
" min_heap[0] = num\n",
482-
" minheapify(min_heap,0,k)\n",
483-
"\n",
484-
" return min_heap[0]\n",
485-
" \n",
486-
"# 原地\n",
487-
"class Solution:\n",
488-
" def findKthLargest(self, nums: List[int], k: int) -> int:\n",
489-
" def minheapify(root,len_heap):\n",
490-
" p = root\n",
491-
" while p*2 + 1 < len_heap:\n",
492-
" left = p*2 + 1\n",
493-
" right = p*2 + 2\n",
494-
"\n",
495-
" min_index = left\n",
496-
" if right < len_heap and nums[right] < nums[left]:\n",
497-
" min_index = right\n",
498-
" \n",
499-
" if nums[p] > nums[min_index]:\n",
500-
" nums[p],nums[min_index] = nums[min_index],nums[p]\n",
501-
" p = min_index\n",
502-
" else:\n",
503-
" break\n",
504-
" \n",
505-
" def build_heap(k):\n",
506-
" for i in range(k-1,-1,-1):\n",
507-
" minheapify(i,k)\n",
508-
" \n",
509-
" build_heap(k)\n",
510-
"\n",
511-
" for i in range(k,len(nums)):\n",
512-
" if nums[i] <= nums[0]:\n",
513-
" continue\n",
514-
" elif nums[i] > nums[0]:\n",
515-
" nums[0],nums[i] = nums[i],nums[0] \n",
516-
" minheapify(0,k)\n",
517-
"\n",
518-
" return nums[0]"
519-
]
520-
},
521-
{
522-
"cell_type": "markdown",
523-
"metadata": {},
524-
"source": [
525-
"思路3"
526-
]
527-
},
528-
{
529-
"cell_type": "code",
530-
"execution_count": null,
531-
"metadata": {},
532-
"outputs": [],
533-
"source": [
534-
"class Solution:\n",
535-
" def findKthLargest(self, nums: List[int], k: int) -> int:\n",
536-
" \n",
537-
" def maxheapify(root,len_heap):\n",
538-
" p = root\n",
539-
" while p * 2 + 1 < len_heap:\n",
540-
" left = p*2 + 1\n",
541-
" right = p*2 + 2\n",
542-
"\n",
543-
" max_index = left \n",
544-
"\n",
545-
" if right < len_heap and nums[right] > nums[left]:\n",
546-
" max_index = right\n",
547-
" \n",
548-
" if nums[p] < nums[max_index]:\n",
549-
" nums[p],nums[max_index] = nums[max_index],nums[p]\n",
550-
" p = max_index\n",
551-
" else:\n",
552-
" break\n",
553-
"\n",
554-
" def build_heap(): \n",
555-
" for i in range(len(nums)//2 - 1, -1, -1):\n",
556-
" maxheapify(i,len(nums))\n",
557-
" \n",
558-
" build_heap()\n",
559-
" for i in range(len(nums),len(nums) - k + 1,-1):\n",
560-
" nums[0],nums[i-1] = nums[i-1],nums[0]\n",
561-
" maxheapify(0,i-1)\n",
562-
" return nums[0]"
563-
]
564-
},
565-
{
566-
"cell_type": "markdown",
567-
"metadata": {},
568-
"source": [
569-
"思路4\n",
570-
"这里就可以用迭代而非递归的方式去做,节约成本,注意用randint,同时还有pivot = random.randint(left,right)。并且我不习惯用randint,所以赋值要格外注意。除了上来nums[left],nums[pivot] = nums[pivot],nums[left] ,把quick转换成我所习惯的形式外,也要把pivot改成left。"
571-
]
572-
},
573-
{
574-
"cell_type": "code",
575-
"execution_count": null,
576-
"metadata": {},
577-
"outputs": [],
578-
"source": [
579-
"class Solution:\n",
580-
" def findKthLargest(self, nums: List[int], k: int) -> int:\n",
581-
" index = len(nums) - k \n",
582-
" left = 0\n",
583-
" right = len(nums) - 1\n",
584-
" while True:\n",
585-
" if left >= right:\n",
586-
" return nums[left]\n",
587-
" pivot = random.randint(left,right) \n",
588-
" i = left \n",
589-
" j = right\n",
590-
"\n",
591-
" nums[left],nums[pivot] = nums[pivot],nums[left]\n",
592-
"\n",
593-
" while i < j:\n",
594-
" while i < j and nums[left] <= nums[j]:\n",
595-
" j -= 1\n",
596-
" while i < j and nums[left] >= nums[i]:\n",
597-
" i += 1\n",
598-
"\n",
599-
" nums[i],nums[j] = nums[j],nums[i]\n",
600-
"\n",
601-
" nums[i],nums[left] = nums[left],nums[i]\n",
602-
"\n",
603-
" if i < index:\n",
604-
" left = i + 1\n",
605-
" elif i > index:\n",
606-
" right = i - 1\n",
607-
" elif i == index:\n",
608-
" return nums[i]"
395+
"### [链接](http://localhost:8888/notebooks/algorithm-pattern-python/data_structure/%E5%A0%86%E7%AC%94%E8%AE%B0.ipynb)\n"
609396
]
610397
}
611398
],

basic_algorithm/.ipynb_checkpoints/二分搜索笔记_未完成-checkpoint.ipynb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
"cell_type": "markdown",
7070
"metadata": {},
7171
"source": [
72-
"- 模板 2 的实现"
72+
"- 模板 2 的实现(在结果不是符合某个target,而是满足和邻居间的大小关系时,这种做法更为适用,因为middle在满足大小关系时不能被剔除出搜索结果)"
7373
]
7474
},
7575
{
@@ -127,6 +127,13 @@
127127
" return -1"
128128
]
129129
},
130+
{
131+
"cell_type": "markdown",
132+
"metadata": {},
133+
"source": [
134+
"例题参见 https://leetcode-cn.com/leetbook/detail/binary-search/"
135+
]
136+
},
130137
{
131138
"cell_type": "markdown",
132139
"metadata": {},

0 commit comments

Comments
 (0)