mirror of
https://github.com/142vip/408CSFamily.git
synced 2026-04-15 02:41:07 +08:00
[5.5 coding]
This commit is contained in:
82
README.md
82
README.md
@@ -183,25 +183,28 @@
|
||||
- 栈的压入、弹出序列
|
||||
|
||||
|
||||
|
||||
### 双指针
|
||||
|
||||
- 和为S的两个数字
|
||||
- 和为S的连续正数序列
|
||||
- 翻转单词顺序列
|
||||
- 左旋转字符串
|
||||
- [【中等】和为S的两个数字](./算法/剑指/双指针/FindNumbersWithSum.js)
|
||||
- [【中等】和为S的连续正数序列](./算法/剑指/双指针/FindContinuousSequence.js)
|
||||
- [【中等】左旋转字符串](./算法/剑指/双指针/LeftRotateString.js)
|
||||
- [【较难】翻转单词顺序列](./算法/剑指/双指针/ReverseSentence.js)
|
||||
|
||||
|
||||
|
||||
### 链表
|
||||
|
||||
- 从尾到头打印链表
|
||||
- 在O(1)时间内删除链表节点
|
||||
- 删除链表中重复的结点
|
||||
- 链表中倒数第K个结点
|
||||
- 链表中环的入口结点
|
||||
- 反转链表
|
||||
- 合并两个排序的链表
|
||||
- 复杂链表的复制
|
||||
- 两个链表的第一个公共结点
|
||||
- [【简单】合并两个排序的链表](./算法/剑指/链表/Merge.js)
|
||||
- [【简单】两个链表的第一个公共结点](./算法/剑指/链表/FindFirstCommonNode.js)
|
||||
- [【中等】链表中倒数第K个结点](./算法/剑指/链表/FindKthToTail.js)
|
||||
- [【中等】反转链表](./算法/剑指/链表/ReverseList.js)
|
||||
- [【较难】从尾到头打印链表](./算法/剑指/链表/printListFromTailToHead.js)
|
||||
- ~~在O(1)时间内删除链表节点~~
|
||||
- [【较难】删除链表中重复的结点](./算法/剑指/链表/deleteDuplication.js)
|
||||
- 链表中环的入口结点[暂时没思路]
|
||||
- 【较难】复杂链表的复制[暂时没有思路]
|
||||
|
||||
|
||||
|
||||
### 树
|
||||
@@ -223,62 +226,62 @@
|
||||
- 树中两个节点的最低公共祖先
|
||||
|
||||
|
||||
### 贪心思想
|
||||
### 综合类型
|
||||
|
||||
#### 贪心思想
|
||||
|
||||
- 剪绳子
|
||||
- 股票的最大利润
|
||||
- [【LeetCode题目】股票的最大利润](./算法/剑指/贪心思想/maxProfit.js)
|
||||
|
||||
|
||||
### 二分查找
|
||||
#### 二分查找
|
||||
|
||||
- 旋转数组的最小数字
|
||||
- 数字在排序数组中出现的次数
|
||||
- [【简单】旋转数组的最小数字](./算法/剑指/二分查找/minNumberInRotateArray.js)
|
||||
- [【中等】数字在排序数组中出现的次数](./算法/剑指/二分查找/GetNumberOfK.js)
|
||||
|
||||
|
||||
### 分治
|
||||
#### 分治
|
||||
|
||||
- 数值的整数次方
|
||||
- [【中等】数值的整数次方](./分治/Power.js)
|
||||
|
||||
|
||||
### 搜索
|
||||
#### 搜索
|
||||
|
||||
- 矩阵中的路劲
|
||||
- 矩阵中的路径 有难度
|
||||
- 机器人的运动范围
|
||||
- 字符串的排列
|
||||
|
||||
|
||||
### 排列
|
||||
#### 排列
|
||||
|
||||
- 调整数组顺序使奇数位于偶数前面
|
||||
- 把数组排成最小的数
|
||||
- 数组中的逆序对
|
||||
- [【中等】调整数组顺序使奇数位于偶数前面](./算法/剑指/排列/reOrderArray.js)
|
||||
- [【较难】把数组排成最小的数](./算法/剑指/双指针/ReverseSentence.js)
|
||||
- 数组中的逆序对 困难
|
||||
|
||||
### 动态规划
|
||||
#### 动态规划
|
||||
|
||||
- 斐波拉契数列
|
||||
- 矩形覆盖
|
||||
- 跳台阶
|
||||
- 变态跳台阶
|
||||
- 连续子数组的最大和
|
||||
- 礼物的最大价值
|
||||
- 最长不含重复字符的子字符串
|
||||
- [【入门】斐波拉契数列](./算法/剑指/动态规划/Fibonacci.js)
|
||||
- [【简单】变态跳台阶 找规律 可跳任意阶](./算法/剑指/动态规划/jumpFloorII.js)
|
||||
- [【简单】连续子数组的最大和 时间复杂度O(n)](./算法/剑指/动态规划/FindGreatestSumOfSubArray.js)
|
||||
- [【简单】构建乘积数组](./算法/剑指/动态规划/multiply.js)
|
||||
- [【中等】矩形覆盖](./算法/剑指/动态规划/rectCover.js)
|
||||
- [【中等】跳台阶 非递归,要么跳一阶,要么跳两阶](./算法/剑指/动态规划/jumpFloor.js)
|
||||
- 丑数
|
||||
- n个骰子的点数
|
||||
- 构建乘积数组
|
||||
|
||||
|
||||
### 数学
|
||||
|
||||
#### 数学问题
|
||||
|
||||
- 数组中出现次数超过一半的数字
|
||||
- 圆圈中最后剩下的数
|
||||
- 从1到n整数中1出现的次数
|
||||
|
||||
### 位运算
|
||||
#### 位运算
|
||||
|
||||
- 二进制中1的个数
|
||||
- 数组中只出现一次的数字
|
||||
|
||||
### 其他
|
||||
### 其他分类
|
||||
|
||||
- 打印从 1 到最大的 n 位数
|
||||
- 正则表达式匹配
|
||||
@@ -292,7 +295,6 @@
|
||||
|
||||
|
||||
|
||||
|
||||
#### [前端常考](https://www.nowcoder.com/activity/oj?tab=3)
|
||||
|
||||
|
||||
|
||||
BIN
算法/.DS_Store
vendored
BIN
算法/.DS_Store
vendored
Binary file not shown.
@@ -4,7 +4,7 @@
|
||||
* @Author: 【B站&公众号】Rong姐姐好可爱
|
||||
* @Date: 2021-04-27 08:39:46
|
||||
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
|
||||
* @LastEditTime: 2021-05-05 07:59:56
|
||||
* @LastEditTime: 2021-05-05 12:55:06
|
||||
-->
|
||||
|
||||
|
||||
@@ -76,62 +76,62 @@
|
||||
- 树中两个节点的最低公共祖先
|
||||
|
||||
|
||||
### 贪心思想
|
||||
### 综合类型
|
||||
|
||||
#### 贪心思想
|
||||
|
||||
- 剪绳子
|
||||
- [【LeetCode题目】股票的最大利润](./贪心思想/maxProfit.js)
|
||||
|
||||
|
||||
### 二分查找
|
||||
#### 二分查找
|
||||
|
||||
- [【简单】旋转数组的最小数字](./二分查找/minNumberInRotateArray.js)
|
||||
- [【中等】数字在排序数组中出现的次数](./二分查找/GetNumberOfK.js)
|
||||
|
||||
|
||||
### 分治
|
||||
#### 分治
|
||||
|
||||
- [【中等】数值的整数次方](./分治/Power.js)
|
||||
|
||||
|
||||
### 搜索
|
||||
#### 搜索
|
||||
|
||||
- 矩阵中的路径 有难度
|
||||
- 机器人的运动范围
|
||||
- 字符串的排列
|
||||
|
||||
|
||||
### 排列
|
||||
#### 排列
|
||||
|
||||
- [【中等】调整数组顺序使奇数位于偶数前面](./排列/reOrderArray.js)
|
||||
- [【较难】把数组排成最小的数](./双指针/ReverseSentence.js)
|
||||
- 数组中的逆序对
|
||||
- 数组中的逆序对 困难
|
||||
|
||||
### 动态规划
|
||||
#### 动态规划
|
||||
|
||||
- 斐波拉契数列
|
||||
- 矩形覆盖
|
||||
- 跳台阶
|
||||
- 变态跳台阶
|
||||
- 连续子数组的最大和
|
||||
- 礼物的最大价值
|
||||
- 最长不含重复字符的子字符串
|
||||
- [【入门】斐波拉契数列](./动态规划/Fibonacci.js)
|
||||
- [【简单】变态跳台阶 找规律 可跳任意阶](./动态规划/jumpFloorII.js)
|
||||
- [【简单】连续子数组的最大和 时间复杂度O(n)](./动态规划/FindGreatestSumOfSubArray.js)
|
||||
- [【简单】构建乘积数组](./动态规划/multiply.js)
|
||||
- [【中等】矩形覆盖](./动态规划/rectCover.js)
|
||||
- [【中等】跳台阶 非递归,要么跳一阶,要么跳两阶](./动态规划/jumpFloor.js)
|
||||
- 丑数
|
||||
- n个骰子的点数
|
||||
- 构建乘积数组
|
||||
|
||||
|
||||
### 数学
|
||||
|
||||
#### 数学问题
|
||||
|
||||
- 数组中出现次数超过一半的数字
|
||||
- 圆圈中最后剩下的数
|
||||
- 从1到n整数中1出现的次数
|
||||
|
||||
### 位运算
|
||||
#### 位运算
|
||||
|
||||
- 二进制中1的个数
|
||||
- 数组中只出现一次的数字
|
||||
|
||||
### 其他
|
||||
### 其他分类
|
||||
|
||||
- 打印从 1 到最大的 n 位数
|
||||
- 正则表达式匹配
|
||||
|
||||
41
算法/剑指/动态规划/Fibonacci.js
Normal file
41
算法/剑指/动态规划/Fibonacci.js
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* @Description: 【入门】斐波拉契数列
|
||||
* @Version: Beta1.0
|
||||
* @Author: 【B站&公众号】Rong姐姐好可爱
|
||||
* @Date: 2021-05-05 11:00:05
|
||||
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
|
||||
* @LastEditTime: 2021-05-05 11:10:56
|
||||
*/
|
||||
|
||||
function Fibonacci (n) {
|
||||
// write code here
|
||||
// 递归调用
|
||||
return n < 2 ? n : Fibonacci(n - 1) + Fibonacci(n - 2)
|
||||
}
|
||||
|
||||
|
||||
// 非递归实现
|
||||
function Fibonacci01 (n) {
|
||||
|
||||
let a = 0, b = 1;
|
||||
|
||||
if (n < 2) {
|
||||
return n;
|
||||
}
|
||||
let result = 0
|
||||
for (let index = 2; index <= n; index++) {
|
||||
// 求和
|
||||
result = a + b;
|
||||
a = b;
|
||||
b = result;
|
||||
}
|
||||
// 返回结果
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
module.exports = {
|
||||
Fibonacci: Fibonacci01
|
||||
};
|
||||
35
算法/剑指/动态规划/FindGreatestSumOfSubArray.js
Normal file
35
算法/剑指/动态规划/FindGreatestSumOfSubArray.js
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* @Description: 【简单】连续子数组的最大和 时间复杂度O(n)
|
||||
* @Version: Beta1.0
|
||||
* @Author: 【B站&公众号】Rong姐姐好可爱
|
||||
* @Date: 2021-05-05 11:34:21
|
||||
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
|
||||
* @LastEditTime: 2021-05-05 11:45:11
|
||||
*/
|
||||
|
||||
function FindGreatestSumOfSubArray (array) {
|
||||
|
||||
// 标记指针
|
||||
let index = 0;
|
||||
// 子串的累计结果
|
||||
let sum = 0;
|
||||
// 子串的累加和最大值,当标记位从
|
||||
let max = array[index];
|
||||
|
||||
|
||||
// 循环
|
||||
while (index < array.length) {
|
||||
sum += array[index];
|
||||
max = sum > max ? sum : max;
|
||||
|
||||
// 注意,重新计数,累计求和,从0开始
|
||||
sum = sum > 0 ? sum : 0
|
||||
index++
|
||||
}
|
||||
return max;
|
||||
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
FindGreatestSumOfSubArray: FindGreatestSumOfSubArray
|
||||
};
|
||||
@@ -1,8 +1,50 @@
|
||||
/*
|
||||
* @Description:
|
||||
* @Description: 【中等】跳台阶 递归,要么跳一阶,要么跳两阶
|
||||
* @Version: Beta1.0
|
||||
* @Author: 【B站&公众号】Rong姐姐好可爱
|
||||
* @Date: 2021-04-28 23:41:55
|
||||
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
|
||||
* @LastEditTime: 2021-04-28 23:41:55
|
||||
* @LastEditTime: 2021-05-05 11:32:38
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 思路: 对于第number台阶,只能从第number-1或者number-2上跳上来
|
||||
* 记作: G(number)=G(number-1)+G(number-2)
|
||||
* 即: 从第number-1跳上来的次数+从第number-2上跳上来的次数
|
||||
*
|
||||
*/
|
||||
|
||||
// 递归实现
|
||||
function jumpFloor (number) {
|
||||
// write code here
|
||||
// 递归,要么跳一阶,要么跳两阶
|
||||
return number < 3 ? number : jumpFloor(number - 1) + jumpFloor(number - 2)
|
||||
}
|
||||
|
||||
// 非递归调用
|
||||
function jumpFloor01 (number) {
|
||||
|
||||
let a = 1;
|
||||
let b = 2;
|
||||
let result = 0;
|
||||
|
||||
if (number < 3) {
|
||||
return number
|
||||
}
|
||||
|
||||
for (let index = 3; index <= number; index++) {
|
||||
result = a + b;
|
||||
a = b;
|
||||
b = result;
|
||||
}
|
||||
|
||||
// 返回
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
jumpFloor: jumpFloor
|
||||
};
|
||||
@@ -4,5 +4,28 @@
|
||||
* @Author: 【B站&公众号】Rong姐姐好可爱
|
||||
* @Date: 2021-04-28 23:41:50
|
||||
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
|
||||
* @LastEditTime: 2021-04-28 23:41:51
|
||||
* @LastEditTime: 2021-05-05 11:26:46
|
||||
*/
|
||||
|
||||
function jumpFloorII (number) {
|
||||
// write code here
|
||||
|
||||
// 我tm跳1 还剩下n-1阶 记作 G(n-1) 可选
|
||||
// 我tm跳2 还剩下n-2阶 记作 G(n-2) 可选
|
||||
// ....
|
||||
// 我tm跳n-1 还剩下1阶 记作 G(1) 可选
|
||||
|
||||
// 归纳出: G(n-1)=G(1)+G(2)+.....+G(n-2);
|
||||
// G(n)=G(1)+G(2)+.....+G(n-2)+G(n-1)
|
||||
|
||||
// 两个相减 G(n)=2* G(n-1) 去递归 G(1)=1 , G(2)=2 G(3)=2*G(2)=4
|
||||
|
||||
// 开始代码
|
||||
// return Math.pow(2,number-1)
|
||||
// 位运算
|
||||
// return 1<<(number-1)
|
||||
return 1 << --number
|
||||
}
|
||||
module.exports = {
|
||||
jumpFloorII: jumpFloorII
|
||||
};
|
||||
23
算法/剑指/动态规划/multiply.js
Normal file
23
算法/剑指/动态规划/multiply.js
Normal file
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* @Description: 【简单】构建乘积数组
|
||||
* @Version: Beta1.0
|
||||
* @Author: 【B站&公众号】Rong姐姐好可爱
|
||||
* @Date: 2021-04-24 11:51:20
|
||||
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
|
||||
* @LastEditTime: 2021-05-05 12:48:43
|
||||
*/
|
||||
|
||||
|
||||
function multiply (array) {
|
||||
let result = [];
|
||||
|
||||
for (let index = 0; index < array.length; index++) {
|
||||
// result.push(array.slice(0, index).reduce((res, item) => res * item, 1) * array.slice(index + 1).reduce((res, item) => res * item, 1))
|
||||
result.push([...array.slice(0, index), ...array.slice(index + 1)].reduce((res, item) => {
|
||||
return res * item;
|
||||
},1)) // 给res的初始值为1
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
console.log(multiply([1, 2, 3, 4, 5]))
|
||||
36
算法/剑指/动态规划/rectCover.js
Normal file
36
算法/剑指/动态规划/rectCover.js
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* @Description: 【中等】矩形覆盖
|
||||
* @Version: Beta1.0
|
||||
* @Author: 【B站&公众号】Rong姐姐好可爱
|
||||
* @Date: 2021-05-05 11:17:02
|
||||
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
|
||||
* @LastEditTime: 2021-05-05 11:18:08
|
||||
*/
|
||||
|
||||
function rectCover (number) {
|
||||
// write code here
|
||||
// 应该也是个递归 斐波拉契变形
|
||||
// n=1 ---> 1
|
||||
// n=2 ---> 2
|
||||
// n=3 ---> 3 <---- 1+2
|
||||
// n=4 ---> 5 <---- 2+3
|
||||
|
||||
let a = 1; // n=1的情况
|
||||
let b = 2; // n=2的情况
|
||||
|
||||
if (number < 3) {
|
||||
return number;
|
||||
}
|
||||
|
||||
let result = 0;
|
||||
for (let index = 3; index <= number; index++) {
|
||||
result = a + b;
|
||||
a = b;
|
||||
b = result;
|
||||
}
|
||||
return result;
|
||||
|
||||
}
|
||||
module.exports = {
|
||||
rectCover: rectCover
|
||||
};
|
||||
Reference in New Issue
Block a user