一。数组

三.数组

1.二分法

(1) 二分法前提条件:有序(单调)

(2)二分法要明白查找区间的定义

    查找区间的定义决定了二分法的写法。写二分法,区间的定义一般为两种,左闭右闭即[left, right],或者左闭右开即[left, right)。

(3)二分法最常用的几个场景:查找目标值,查找左右边界

(4)二分查找框架

(5)查找一个数的二分搜索(基本的二分搜索):left<=right

  次算法缺陷:无法寻找左侧边界或者右侧边界

(6)查找左侧边界的二分搜索,查找右侧边界的二分搜索

2.双指针

(1)应用:数组,链表,字符串

    数组:N27删除元素,N26删除重复元素,N977有序数组的平方、

    链表:N206翻转链表,N19删除链表倒数第N个节点,N160(N0207)链表相交,N141环形链表1,N142环形链表2,N876链表中点

    字符串:N344翻转字符串,N125判断回文串

    数相关:两数之和,三数之和,四数之和

(2)左右指针:解决数组,字符串问题。如二分查找。两个指针相向而行

    快慢指针:解决链表问题。如典型的判断链表是否有环。

    滑动窗口也是特殊的双指针,解决子串问题。滑动窗口是双指针的最高境界了

快慢指针:

1.判断链表是否有环:

  思路:无环,fast最终会等于null;有环,fast会比slow多走一圈,最终相遇

2.判断链表是否有环,并返回入环位置 

3.链表中点 4.删除链表倒数第n个节点

左右指针:

1.二分查找。

2.(1)两数之和1

 (2)N167两数之和2。暴力枚举和哈希法都是针对无序数组,对于有序数组可以用双指针

3.N344反转字符串

滑动窗口:

 HashMap的putIfAbsent()方法和getOrDefault方法得看看

getOrDefault方法很好用

ASCII码表:0-9 < A-Z < a-z  大小:128个字符

1.思想:N76

 2.N3题每搞懂,得再看看

原文地址:https://www.cnblogs.com/midiyu/p/15416743.html