Merge branch 'master' of github.com:youngyangyang04/leetcode-master

This commit is contained in:
programmercarl
2024-01-08 15:35:29 +08:00
10 changed files with 433 additions and 0 deletions

View File

@ -464,6 +464,27 @@ impl Solution {
}
}
```
### C#
```csharp
// 版本二
public class Solution
{
public int Jump(int[] nums)
{
int cur = 0, next = 0, step = 0;
for (int i = 0; i < nums.Length - 1; i++)
{
next = Math.Max(next, i + nums[i]);
if (i == cur)
{
cur = next;
step++;
}
}
return step;
}
}
```
<p align="center">
<a href="https://programmercarl.com/other/kstar.html" target="_blank">

View File

@ -258,6 +258,23 @@ object Solution {
}
}
```
### C#
```csharp
public class Solution
{
public bool CanJump(int[] nums)
{
int cover = 0;
if (nums.Length == 1) return true;
for (int i = 0; i <= cover; i++)
{
cover = Math.Max(i + nums[i], cover);
if (cover >= nums.Length - 1) return true;
}
return false;
}
}
```
<p align="center">
<a href="https://programmercarl.com/other/kstar.html" target="_blank">

View File

@ -406,6 +406,21 @@ object Solution {
}
}
```
### C#
```csharp
public class Solution
{
public int MaxProfit(int[] prices)
{
int res = 0;
for (int i = 0; i < prices.Length - 1; i++)
{
res += Math.Max(0, prices[i + 1] - prices[i]);
}
return res;
}
}
```
<p align="center">
<a href="https://programmercarl.com/other/kstar.html" target="_blank">

View File

@ -435,6 +435,132 @@ class Solution:
```
### JavaScript
```JavaScript
/**
* @description 深度搜索优先
* @param {character[][]} board
* @return {void} Do not return anything, modify board in-place instead.
*/
function solve(board) {
const dir = [[-1, 0], [1, 0], [0, -1], [0, 1]];
const [rowSize, colSize] = [board.length, board[0].length];
function dfs(board, x, y) {
board[x][y] = 'A';
for (let i = 0; i < 4; i++) {
const nextX = dir[i][0] + x;
const nextY = dir[i][1] + y;
if (nextX < 0 || nextX >= rowSize || nextY < 0 || nextY >= colSize) {
continue;
}
if (board[nextX][nextY] === 'O') {
dfs(board, nextX, nextY);
}
}
}
for (let i = 0; i < rowSize; i++) {
if (board[i][0] === 'O') {
dfs(board, i, 0);
}
if (board[i][colSize - 1] === 'O') {
dfs(board, i, colSize - 1);
}
}
for (let i = 1; i < colSize - 1; i++) {
if (board[0][i] === 'O') {
dfs(board, 0, i);
}
if (board[rowSize - 1][i] === 'O') {
dfs(board, rowSize - 1, i);
}
}
for (let i = 0; i < rowSize; i++) {
for (let k = 0; k < colSize; k++) {
if (board[i][k] === 'A') {
board[i][k] = 'O';
} else if (board[i][k] === 'O') {
board[i][k] = 'X';
}
}
}
}
/**
* @description 广度搜索优先
* @param {character[][]} board
* @return {void} Do not return anything, modify board in-place instead.
*/
function solve(board) {
const dir = [[-1, 0], [1, 0], [0, -1], [0, 1]];
const [rowSize, colSize] = [board.length, board[0].length];
function bfs(board, x, y) {
board[x][y] = 'A';
const stack = [y, x];
while (stack.length !== 0) {
const top = [stack.pop(), stack.pop()];
for (let i = 0; i < 4; i++) {
const nextX = dir[i][0] + top[0];
const nextY = dir[i][1] + top[1];
if (nextX < 0 || nextX >= rowSize || nextY < 0 || nextY >= colSize) {
continue;
}
if (board[nextX][nextY] === 'O') {
board[nextX][nextY] = 'A';
stack.push(nextY, nextX);
}
}
}
for (let i = 0; i < 4; i++) {
const nextX = dir[i][0] + x;
const nextY = dir[i][1] + y;
if (nextX < 0 || nextX >= rowSize || nextY < 0 || nextY >= colSize) {
continue;
}
if (board[nextX][nextY] === 'O') {
dfs(board, nextX, nextY);
}
}
}
for (let i = 0; i < rowSize; i++) {
if (board[i][0] === 'O') {
bfs(board, i, 0);
}
if (board[i][colSize - 1] === 'O') {
bfs(board, i, colSize - 1);
}
}
for (let i = 1; i < colSize - 1; i++) {
if (board[0][i] === 'O') {
bfs(board, 0, i);
}
if (board[rowSize - 1][i] === 'O') {
bfs(board, rowSize - 1, i);
}
}
for (let i = 0; i < rowSize; i++) {
for (let k = 0; k < colSize; k++) {
if (board[i][k] === 'A') {
board[i][k] = 'O';
} else if (board[i][k] === 'O') {
board[i][k] = 'X';
}
}
}
}
```
<p align="center">
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>

View File

@ -630,6 +630,29 @@ object Solution {
}
}
```
### C#
```csharp
// 贪心算法,方法二
public class Solution
{
public int CanCompleteCircuit(int[] gas, int[] cost)
{
int curSum = 0, totalSum = 0, start = 0;
for (int i = 0; i < gas.Length; i++)
{
curSum += gas[i] - cost[i];
totalSum += gas[i] - cost[i];
if (curSum < 0)
{
start = i + 1;
curSum = 0;
}
}
if (totalSum < 0) return -1;
return start;
}
}
```
<p align="center">
<a href="https://programmercarl.com/other/kstar.html" target="_blank">

View File

@ -370,6 +370,35 @@ object Solution {
}
}
```
### C#
```csharp
public class Solution
{
public int Candy(int[] ratings)
{
int[] candies = new int[ratings.Length];
for (int i = 0; i < candies.Length; i++)
{
candies[i] = 1;
}
for (int i = 1; i < ratings.Length; i++)
{
if (ratings[i] > ratings[i - 1])
{
candies[i] = candies[i - 1] + 1;
}
}
for (int i = ratings.Length - 2; i >= 0; i--)
{
if (ratings[i] > ratings[i + 1])
{
candies[i] = Math.Max(candies[i], candies[i + 1] + 1);
}
}
return candies.Sum();
}
}
```
<p align="center">

View File

@ -206,6 +206,34 @@ class Solution:
```
二维DP版
```python
class Solution:
def combinationSum4(self, nums: List[int], target: int) -> int:
# dp[][j]和为j的组合的总数
dp = [[0] * (target+1) for _ in nums]
for i in range(len(nums)):
dp[i][0] = 1
# 这里不能初始化dp[0][j]。dp[0][j]的值依赖于dp[-1][j-nums[0]]
for j in range(1, target+1):
for i in range(len(nums)):
if j - nums[i] >= 0:
dp[i][j] = (
# 不放nums[i]
# i = 0 时dp[-1][j]恰好为0所以没有特殊处理
dp[i-1][j] +
# 放nums[i]。对于和为j的组合只有试过全部物品才能知道有几种组合方式。所以取最后一个物品dp[-1][j-nums[i]]
dp[-1][j-nums[i]]
)
else:
dp[i][j] = dp[i-1][j]
return dp[-1][-1]
```
### Go
```go

View File

@ -450,6 +450,117 @@ class Solution:
return ans
```
### JavaScript
```JavaScript
/**
* @description 深度搜索优先
* @param {number[][]} heights
* @return {number[][]}
*/
function pacificAtlantic(heights) {
const dir = [[-1, 0], [0, -1], [1, 0], [0, 1]];
const [rowSize, colSize] = [heights.length, heights[0].length];
const visited = Array.from({ length: rowSize }, _ =>
Array.from({ length: colSize }, _ => new Array(2).fill(false))
);
const result = [];
function dfs(heights, visited, x, y, sign) {
if (visited[x][y][sign]) {
return;
}
visited[x][y][sign] = true;
for (let i = 0; i < 4; i++) {
const nextX = x + dir[i][0];
const nextY = y + dir[i][1];
if (nextX < 0 || nextX >= rowSize || nextY < 0 || nextY >= colSize) {
continue;
}
if (heights[x][y] > heights[nextX][nextY]) {
continue;
}
dfs(heights, visited, nextX, nextY, sign);
}
}
for (let i = 0; i < rowSize; i++) {
dfs(heights, visited, i, 0, 0);
dfs(heights, visited, i, colSize - 1, 1);
}
for (let i = 0; i < colSize; i++) {
dfs(heights, visited, 0, i, 0);
dfs(heights, visited, rowSize - 1, i, 1);
}
for (let i = 0; i < rowSize; i++) {
for (let k = 0; k < colSize; k++) {
if (visited[i][k][0] && visited[i][k][1]) {
result.push([i, k]);
}
}
}
return result;
}
/**
* @description 广度搜索优先
* @param {number[][]} heights
* @return {number[][]}
*/
function pacificAtlantic(heights) {
const dir = [[-1, 0], [0, -1], [1, 0], [0, 1]];
const [rowSize, colSize] = [heights.length, heights[0].length];
const visited = Array.from({ length: rowSize }, _ =>
Array.from({ length: colSize }, _ => new Array(2).fill(false))
);
const result = [];
function bfs(heights, visited, x, y, sign) {
if (visited[x][y][sign]) {
return;
}
visited[x][y][sign] = true;
const stack = [y, x];
while (stack.length !== 0) {
[x, y] = [stack.pop(), stack.pop()];
for (let i = 0; i < 4; i++) {
const nextX = x + dir[i][0];
const nextY = y + dir[i][1];
if (nextX < 0 || nextX >= rowSize || nextY < 0 || nextY >= colSize) {
continue;
}
if (heights[x][y] > heights[nextX][nextY] || visited[nextX][nextY][sign]) {
continue;
}
visited[nextX][nextY][sign] = true;
stack.push(nextY, nextX);
}
}
}
for (let i = 0; i < rowSize; i++) {
bfs(heights, visited, i, 0, 0);
bfs(heights, visited, i, colSize - 1, 1);
}
for (let i = 0; i < colSize; i++) {
bfs(heights, visited, 0, i, 0);
bfs(heights, visited, rowSize - 1, i, 1);
}
for (let i = 0; i < rowSize; i++) {
for (let k = 0; k < colSize; k++) {
if (visited[i][k][0] && visited[i][k][1]) {
result.push([i, k]);
}
}
}
return result;
}
```

View File

@ -397,6 +397,46 @@ object Solution {
}
}
```
### C#
```csharp
public class Solution
{
public bool LemonadeChange(int[] bills)
{
int five = 0, ten = 0, twenty = 0;
foreach (var bill in bills)
{
if (bill == 5) five++;
if (bill == 10)
{
if (five == 0) return false;
five--;
ten++;
}
if (bill == 20)
{
if (ten > 0 && five > 0)
{
ten--;
five--;
twenty++;
}
else if (five >= 3)
{
five -= 3;
twenty++;
}
else
{
return false;
}
}
}
return true;
}
}
```
<p align="center">

View File

@ -322,6 +322,29 @@ object Solution {
}
```
### C#
```csharp
public class Solution
{
public int LargestSumAfterKNegations(int[] nums, int k)
{
int res = 0;
Array.Sort(nums, (a, b) => Math.Abs(b) - Math.Abs(a));
for (int i = 0; i < nums.Length; i++)
{
if (nums[i] < 0 && k > 0)
{
nums[i] *= -1;
k--;
}
}
if (k % 2 == 1) nums[nums.Length - 1] *= -1;
foreach (var item in nums) res += item;
return res;
}
}
```
<p align="center">