查找

#1 有序数组二分查找

https://oj.leetcode.com/tag/binary-search/ (TODO)

优点:o(logn)查找

缺点:o(n)插入

二分查找计算中点避免溢出:m = (l + r) / 2 = l + (r - l) / 2

模板要点

    0: start = 0 end = A.length -1

    1: while (start + 1 < end)

    2: mid = start + (end - start) / 2

    3: A[mid] ==, <, > 不加不减 start = mid 或者 end = mid

    4: while loop之外 两种情况 两个元素(start + 1 == end)或者一个元素(start == end) 不论哪种情况 都是分别处理start与end

KTH不可用此模板

http://www.lintcode.com/en/problem/binary-search/

B1:https://oj.leetcode.com/problems/search-for-a-range/ ()

B2:https://oj.leetcode.com/problems/search-a-2d-matrix/

http://www.lintcode.com/en/problem/search-a-2d-matrix-ii/ 有序二维数组中查找

https://oj.leetcode.com/problems/search-insert-position/

J11:https://oj.leetcode.com/problems/find-peak-element/ 

http://lintcode.com/en/problem/first-bad-version/

https://leetcode.com/problems/sqrtx/

B3:https://oj.leetcode.com/problems/find-minimum-in-rotated-sorted-array/ () (模板 但是中间跟边比,跟左边比的无法处理没有rotate的情况)

         https://oj.leetcode.com/problems/search-in-rotated-sorted-array/ 

         办法1:先用上面longN找到最小,然后二分查找 缺点: 特殊处理1个元素与没有rotate的

         方法2:分析左段, 分析右段

B4:https://oj.leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/

         https://oj.leetcode.com/problems/search-in-rotated-sorted-array-ii/ 

https://oj.leetcode.com/problems/median-of-two-sorted-arrays/ (难重)

数学相关

J1:https://oj.leetcode.com/problems/divide-two-integers/ ()(除了溢出还要小心除0)

J2:https://oj.leetcode.com/problems/sqrtx/  (比特探测好写)

#2 二叉查找树(BST)

缺点:最差情况o(n)

BST

#3 平衡二叉查找树 

2-3树:每个节点最多有三个子节点

完美2-3树:所有叶子节点在同一层

2-3树与红黑树之间有一一对应关系

Java TreeSet由RedBlackBST实现

优点:插入查找o(logn)

#4 Hash

Java HashSet由SeperateChain实现

https://oj.leetcode.com/tag/hash-table/ (TODO)

A6-1:https://oj.leetcode.com/problems/two-sum/

https://oj.leetcode.com/problems/two-sum-iii-data-structure-design/

实现一个插入,删除,随机都是O(1)复杂度的Set

#5 找第K元素

无序数组中找第K大的数 ()

https://oj.leetcode.com/problems/median-of-two-sorted-arrays/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值