https://www.bilibili.com/video/BV1ta4y1H7wX?p=2&spm_id_from=pageDriver
这个视频
经过检验,实际上三百分钟搞不定算法面试,。
image.png
image.png
image.png

掌握实用的数据结构

image.png

数组 Array

题目 翻转字符

image.png
我们需要先将字符串转为数组,再用两个指针头尾交换。
image.png

题目 力扣242 有效的字母异位词

相同字符数量相等
image.pngimage.png

链表 Linked List

image.png

image.png
image.png
如何训练该技巧:在纸上画出节点之间的相互关系,画出修改的方法

题目 力扣25 k个一组翻转链表 01讲

image.png

image.png

题目 20 面试有考 有效的括号

image.png
image.png

题目 力扣739 每日温度

image.png
image.png

队列 Queue

image.png
队列只能头端查看和删除 尾端查看和添加
双向队列就好一点
image.png

题目 力扣239 双端队列 滑动窗口最大值

image.png
image.png

树Tree

image.png

前根左右 : 树里搜索 创建新树
中左跟右 : 对二叉搜索树中序遍历是有顺序对
后左右跟: 见下题

题目 力扣230 二叉搜索中第k小对元素

image.png

高级数据结构

image.png

优先队列

image.png
image.png
image.png
image.png

题目 力扣347 前K个高频元素

image.png

图 Graph

image.png

image.png
image.png
掌握图的遍历是重中之重

题目 力扣785 判断二分图

image.png

前缀树 Trie

image.png
image.png
image.png
image.png
image.png

题目 力扣212 单词搜索

image.png
image.png

线段树 Segment Tree

image.png
image.png

题目 力扣315 计算右侧小于当前元素的个数

image.png
image.png
没看懂。。。。。

树状数组 Fenwick Tree/Binary Indexed Tree

image.png
image.png
image.png

排序算法 Sort

image.png

image.png

冒泡排序 Bubble Sort

image.png

题目

image.pngimage.png

  1. public int[] Bubble_sort(int[] nums){
  2. boolean hasChange = true;
  3. int temp;
  4. for(int i = 0; i < nums.length - 1 && hasChange; i++){
  5. hasChange = false;
  6. for(int j = 0; j < nums.length - i - 1;j++){
  7. if(nums[j] > nums[j+1]){
  8. temp = nums[j];
  9. nums[j] = nums[j+1] ;
  10. nums[j+1] = temp;
  11. hasChange = true;
  12. }
  13. }
  14. }
  15. return nums;
  16. }

image.png

插入排序 Insertion Sort

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
代码1 感觉不如第二种

public static int[] insertionSort(int[] array){
       //由于默认认为第一个是有序的,则从第二个元素开始比较,因此循环从1开始
        for (int i = 1; i <array.length ; i++) {
            //从当前元素依次循环遍历与前面所有有序的元素挨个比较,找到合适的插入位置交换位置
            for (int j = i-1; j >=0 ; j--) {
                //如果后一个数比前面任何一个数小则交换,一直交换到合适的位置(这里是升序排序)
                //如果想要降序排序,则修改为>即可
                if (array[j+1]<array[j]){
                    int temp=array[j+1];
                    array[j+1]=array[j];
                    array[j]=temp;
                }
            }
        }
        //返回已经排序完毕的数组
        return array;

代码2

//插入排序
    public int[] Insertion_sort(int[] nums){
        for(int i = 1, j , current; i < nums.length; i++){
            current = nums[i];  //默认把第1个元素放以排好顺序第一堆  从第2个元素开始

            for(j = i - 1; j >= 0 && nums[j] > current; j--){
                nums[j + 1] = nums[j];
            }

            nums[j + 1] = current;
        }
        return nums;
    }

image.png

题目 力扣147

image.png

归并排序Merge Sort

两个数组合的地方常考
image.pngimage.pngimage.png
image.png
image.png
image.png
image.png