Merge branch 'youngyangyang04:master' into master

This commit is contained in:
Arthur Pan
2022-05-15 14:37:35 +01:00
committed by GitHub
6 changed files with 135 additions and 26 deletions

View File

@ -168,6 +168,39 @@ func lengthOfLIS(nums []int ) int {
} }
``` ```
```go
// 动态规划求解
func lengthOfLIS(nums []int) int {
// dp数组的定义 dp[i]表示取第i个元素的时候表示子序列的长度其中包括 nums[i] 这个元素
dp := make([]int, len(nums))
// 初始化所有的元素都应该初始化为1
for i := range dp {
dp[i] = 1
}
ans := dp[0]
for i := 1; i < len(nums); i++ {
for j := 0; j < i; j++ {
if nums[i] > nums[j] {
dp[i] = max(dp[i], dp[j] + 1)
}
}
if dp[i] > ans {
ans = dp[i]
}
}
return ans
}
func max(x, y int) int {
if x > y {
return x
}
return y
}
```
Javascript Javascript
```javascript ```javascript
const lengthOfLIS = (nums) => { const lengthOfLIS = (nums) => {

View File

@ -236,6 +236,45 @@ class Solution:
``` ```
Go Go
> 动态规划:
```go
func findLengthOfLCIS(nums []int) int {
if len(nums) == 0 {return 0}
res, count := 1, 1
for i := 0; i < len(nums)-1; i++ {
if nums[i+1] > nums[i] {
count++
}else {
count = 1
}
if count > res {
res = count
}
}
return res
}
```
> 贪心算法:
```go
func findLengthOfLCIS(nums []int) int {
if len(nums) == 0 {return 0}
dp := make([]int, len(nums))
for i := 0; i < len(dp); i++ {
dp[i] = 1
}
res := 1
for i := 0; i < len(nums)-1; i++ {
if nums[i+1] > nums[i] {
dp[i+1] = dp[i] + 1
}
if dp[i+1] > res {
res = dp[i+1]
}
}
return res
}
```
Javascript Javascript

View File

@ -476,7 +476,35 @@ var minCameraCover = function(root) {
}; };
``` ```
### TypeScript
```typescript
function minCameraCover(root: TreeNode | null): number {
/** 0-无覆盖, 1-有摄像头, 2-有覆盖 */
type statusCode = 0 | 1 | 2;
let resCount: number = 0;
if (recur(root) === 0) resCount++;
return resCount;
function recur(node: TreeNode | null): statusCode {
if (node === null) return 2;
const left: statusCode = recur(node.left),
right: statusCode = recur(node.right);
let resStatus: statusCode = 0;
if (left === 0 || right === 0) {
resStatus = 1;
resCount++;
} else if (left === 1 || right === 1) {
resStatus = 2;
} else {
resStatus = 0;
}
return resStatus;
}
};
```
### C ### C
```c ```c
/* /*
**函数后序遍历二叉树。判断一个结点状态时,根据其左右孩子结点的状态进行判断 **函数后序遍历二叉树。判断一个结点状态时,根据其左右孩子结点的状态进行判断

View File

@ -11,9 +11,9 @@
看完本篇大家可以使用迭代法再重新解决如下三道leetcode上的题目 看完本篇大家可以使用迭代法再重新解决如下三道leetcode上的题目
* 144.二叉树的前序遍历 * [144.二叉树的前序遍历](https://leetcode-cn.com/problems/binary-tree-preorder-traversal/)
* 94.二叉树的中序遍历 * [94.二叉树的中序遍历](https://leetcode-cn.com/problems/binary-tree-inorder-traversal/)
* 145.二叉树的后序遍历 * [145.二叉树的后序遍历](https://leetcode-cn.com/problems/binary-tree-postorder-traversal/)
为什么可以用迭代法(非递归的方式)来实现二叉树的前后中序遍历呢? 为什么可以用迭代法(非递归的方式)来实现二叉树的前后中序遍历呢?

View File

@ -99,9 +99,9 @@ void traversal(TreeNode* cur, vector<int>& vec) {
此时大家可以做一做leetcode上三道题目分别是 此时大家可以做一做leetcode上三道题目分别是
* 144.二叉树的前序遍历 * [144.二叉树的前序遍历](https://leetcode-cn.com/problems/binary-tree-preorder-traversal/)
* 145.二叉树的后序遍历 * [145.二叉树的后序遍历](https://leetcode-cn.com/problems/binary-tree-postorder-traversal/)
* 94.二叉树的中序遍历 * [94.二叉树的中序遍历](https://leetcode-cn.com/problems/binary-tree-inorder-traversal/)
可能有同学感觉前后中序遍历的递归太简单了,要打迭代法(非递归),别急,我们明天打迭代法,打个通透! 可能有同学感觉前后中序遍历的递归太简单了,要打迭代法(非递归),别急,我们明天打迭代法,打个通透!

View File

@ -380,28 +380,37 @@ func main() {
### javascript ### javascript
```js ```js
function testweightbagproblem (wight, value, size) { /**
const len = wight.length, *
dp = array.from({length: len + 1}).map( * @param {Number []} weight
() => array(size + 1).fill(0) * @param {Number []} value
); * @param {Number} size
* @returns
for(let i = 1; i <= len; i++) { */
for(let j = 0; j <= size; j++) {
if(wight[i - 1] <= j) {
dp[i][j] = math.max(
dp[i - 1][j],
value[i - 1] + dp[i - 1][j - wight[i - 1]]
)
} else {
dp[i][j] = dp[i - 1][j];
}
}
}
// console.table(dp); function testWeightBagProblem(weight, value, size) {
const len = weight.length,
dp = Array.from({length: len}).map(
() => Array(size + 1)) //JavaScript 数组是引用类型
for(let i = 0; i < len; i++) { //初始化最左一列即背包容量为0时的情况
dp[i][0] = 0;
}
for(let j = 1; j < size+1; j++) { //初始化第0行, 只有一件物品的情况
if(weight[0] <= j) {
dp[0][j] = value[0];
} else {
dp[0][j] = 0;
}
}
for(let i = 1; i < len; i++) { //dp[i][j]由其左上方元素推导得出
for(let j = 1; j < size+1; j++) {
if(j < weight[i]) dp[i][j] = dp[i - 1][j];
else dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j - weight[i]] + value[i]);
}
}
return dp[len][size]; return dp[len-1][size] //满足条件的最大值
} }
function testWeightBagProblem2 (wight, value, size) { function testWeightBagProblem2 (wight, value, size) {