zoukankan      html  css  js  c++  java
  • 一。数组

    三.数组

    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题每搞懂,得再看看

  • 相关阅读:
    总结前端笔面试遇到的问题——HTML部分
    js中的克隆方法
    js操作cookie
    JS中4种常见的内存泄漏
    html、css、js三者的加载顺序
    js中object定义的几种方法
    关于settimeout的面试题
    css各种居中解决方法
    JS实现继承的几种方式
    将博客搬至CSDN
  • 原文地址:https://www.cnblogs.com/midiyu/p/15416743.html
Copyright © 2011-2022 走看看