https://www.bilibili.com/video/BV1ta4y1H7wX?p=2&spm_id_from=pageDriver
这个视频
经过检验,实际上三百分钟搞不定算法面试,。
掌握实用的数据结构
数组 Array
题目 翻转字符
我们需要先将字符串转为数组,再用两个指针头尾交换。
题目 力扣242 有效的字母异位词
相同字符数量相等
链表 Linked List
如何训练该技巧:在纸上画出节点之间的相互关系,画出修改的方法
题目 力扣25 k个一组翻转链表 01讲
栈
题目 20 面试有考 有效的括号
题目 力扣739 每日温度
队列 Queue
队列只能头端查看和删除 尾端查看和添加
双向队列就好一点
题目 力扣239 双端队列 滑动窗口最大值
树Tree
前根左右 : 树里搜索 创建新树
中左跟右 : 对二叉搜索树中序遍历是有顺序对
后左右跟: 见下题
题目 力扣230 二叉搜索中第k小对元素
高级数据结构
优先队列
题目 力扣347 前K个高频元素
图 Graph
题目 力扣785 判断二分图
前缀树 Trie
题目 力扣212 单词搜索
线段树 Segment Tree
题目 力扣315 计算右侧小于当前元素的个数
没看懂。。。。。
树状数组 Fenwick Tree/Binary Indexed Tree
排序算法 Sort
冒泡排序 Bubble Sort
题目
public int[] Bubble_sort(int[] nums){
boolean hasChange = true;
int temp;
for(int i = 0; i < nums.length - 1 && hasChange; i++){
hasChange = false;
for(int j = 0; j < nums.length - i - 1;j++){
if(nums[j] > nums[j+1]){
temp = nums[j];
nums[j] = nums[j+1] ;
nums[j+1] = temp;
hasChange = true;
}
}
}
return nums;
}
插入排序 Insertion Sort
代码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;
}
题目 力扣147
归并排序Merge Sort
两个数组合的地方常考