Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
KingArthur0205 committed May 15, 2022
2 parents aa22b80 + a20ac9d commit d15c4af
Show file tree
Hide file tree
Showing 6 changed files with 136 additions and 27 deletions.
33 changes: 33 additions & 0 deletions problems/0300.最长上升子序列.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
const lengthOfLIS = (nums) => {
Expand Down
39 changes: 39 additions & 0 deletions problems/0674.最长连续递增序列.md
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,45 @@ class Solution:
```

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:

Expand Down
28 changes: 28 additions & 0 deletions problems/0968.监控二叉树.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
/*
**函数后序遍历二叉树。判断一个结点状态时,根据其左右孩子结点的状态进行判断
Expand Down
6 changes: 3 additions & 3 deletions problems/二叉树的迭代遍历.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
看完本篇大家可以使用迭代法,再重新解决如下三道leetcode上的题目:

* 144.二叉树的前序遍历
* 94.二叉树的中序遍历
* 145.二叉树的后序遍历
* [144.二叉树的前序遍历](https://leetcode-cn.com/problems/binary-tree-preorder-traversal/)
* [94.二叉树的中序遍历](https://leetcode-cn.com/problems/binary-tree-inorder-traversal/)
* [145.二叉树的后序遍历](https://leetcode-cn.com/problems/binary-tree-postorder-traversal/)

为什么可以用迭代法(非递归的方式)来实现二叉树的前后中序遍历呢?

Expand Down
6 changes: 3 additions & 3 deletions problems/二叉树的递归遍历.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,9 @@ void traversal(TreeNode* cur, vector<int>& vec) {

此时大家可以做一做leetcode上三道题目,分别是:

* 144.二叉树的前序遍历
* 145.二叉树的后序遍历
* 94.二叉树的中序遍历
* [144.二叉树的前序遍历](https://leetcode-cn.com/problems/binary-tree-preorder-traversal/)
* [145.二叉树的后序遍历](https://leetcode-cn.com/problems/binary-tree-postorder-traversal/)
* [94.二叉树的中序遍历](https://leetcode-cn.com/problems/binary-tree-inorder-traversal/)

可能有同学感觉前后中序遍历的递归太简单了,要打迭代法(非递归),别急,我们明天打迭代法,打个通透!

Expand Down
51 changes: 30 additions & 21 deletions problems/背包理论基础01背包-1.md
Original file line number Diff line number Diff line change
Expand Up @@ -380,28 +380,37 @@ func main() {
### javascript

```js
function testweightbagproblem (wight, value, size) {
const len = wight.length,
dp = array.from({length: len + 1}).map(
() => array(size + 1).fill(0)
);

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);
/**
*
* @param {Number []} weight
* @param {Number []} value
* @param {Number} size
* @returns
*/

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) {
Expand Down

0 comments on commit d15c4af

Please sign in to comment.