mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-06 15:09:40 +08:00
Merge branch 'master' of github.com:youngyangyang04/leetcode-master
This commit is contained in:
@ -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">
|
||||
|
@ -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">
|
||||
|
@ -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">
|
||||
|
@ -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"/>
|
||||
|
@ -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">
|
||||
|
@ -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">
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
@ -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">
|
||||
|
@ -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">
|
||||
|
Reference in New Issue
Block a user