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

This commit is contained in:
programmercarl
2024-06-30 15:46:30 +08:00
7 changed files with 291 additions and 29 deletions

View File

@ -151,6 +151,96 @@ if (nums[k] + nums[i] > target && nums[i] >= 0) {
## 其他语言版本
### C:
```C
/* qsort */
static int cmp(const void* arg1, const void* arg2) {
int a = *(int *)arg1;
int b = *(int *)arg2;
return (a > b);
}
int** fourSum(int* nums, int numsSize, int target, int* returnSize, int** returnColumnSizes) {
/* 对nums数组进行排序 */
qsort(nums, numsSize, sizeof(int), cmp);
int **res = (int **)malloc(sizeof(int *) * 40000);
int index = 0;
/* k */
for (int k = 0; k < numsSize - 3; k++) { /* 第一级 */
/* k剪枝 */
if ((nums[k] > target) && (nums[k] >= 0)) {
break;
}
/* k去重 */
if ((k > 0) && (nums[k] == nums[k - 1])) {
continue;
}
/* i */
for (int i = k + 1; i < numsSize - 2; i++) { /* 第二级 */
/* i剪枝 */
if ((nums[k] + nums[i] > target) && (nums[i] >= 0)) {
break;
}
/* i去重 */
if ((i > (k + 1)) && (nums[i] == nums[i - 1])) {
continue;
}
/* left and right */
int left = i + 1;
int right = numsSize - 1;
while (left < right) {
/* 防止大数溢出 */
long long val = (long long)nums[k] + nums[i] + nums[left] + nums[right];
if (val > target) {
right--;
} else if (val < target) {
left++;
} else {
int *res_tmp = (int *)malloc(sizeof(int) * 4);
res_tmp[0] = nums[k];
res_tmp[1] = nums[i];
res_tmp[2] = nums[left];
res_tmp[3] = nums[right];
res[index++] = res_tmp;
/* right去重 */
while ((right > left) && (nums[right] == nums[right - 1])) {
right--;
}
/* left去重 */
while ((left < right) && (nums[left] == nums[left + 1])) {
left++;
}
/* 更新right与left */
left++, right--;
}
}
}
}
/* 返回值处理 */
*returnSize = index;
int *column = (int *)malloc(sizeof(int) * index);
for (int i = 0; i < index; i++) {
column[i] = 4;
}
*returnColumnSizes = column;
return res;
}
```
### Java
```Java

View File

@ -550,6 +550,27 @@ function uniquePathsWithObstacles(obstacleGrid: number[][]): number {
};
```
// 版本二: dp改為使用一維陣列從終點開始遍歷
```typescript
function uniquePathsWithObstacles(obstacleGrid: number[][]): number {
const m = obstacleGrid.length;
const n = obstacleGrid[0].length;
const dp: number[] = new Array(n).fill(0);
dp[n - 1] = 1;
// 由下而上,右而左進行遍歷
for (let i = m - 1; i >= 0; i--) {
for (let j = n - 1; j >= 0; j--) {
if (obstacleGrid[i][j] === 1) dp[j] = 0;
else dp[j] = dp[j] + (dp[j + 1] || 0);
}
}
return dp[0];
};
```
### Rust
```Rust

View File

@ -241,6 +241,33 @@ class Solution:
### Go
使用栈
```go
func removeDuplicates(s string) string {
stack := make([]rune, 0)
for _, val := range s {
if len(stack) == 0 || val != stack[len(stack)-1] {
stack = append(stack, val)
} else {
stack = stack[:len(stack)-1]
}
}
var res []rune
for len(stack) != 0 { // 将栈中元素放到result字符串汇总
res = append(res, stack[len(stack)-1])
stack = stack[:len(stack)-1]
}
// 此时字符串需要反转一下
l, r := 0, len(res)-1
for l < r {
res[l], res[r] = res[r], res[l]
l++
r--
}
return string(res)
}
```
拿字符串直接作为栈,省去了栈还要转为字符串的操作
```go
func removeDuplicates(s string) string {
var stack []byte

View File

@ -362,10 +362,43 @@ main();
### Scala:
### PHP
```php
<?php
// 标准输入
$s = trim(fgets(STDIN));
$oldLen = strlen($s);
$count = 0;
for ($i = 0; $i < $oldLen; $i++) {
if (is_numeric($s[$i])) {
$count++;
}
}
// 扩充字符串
$s = str_pad($s, $oldLen + $count * 5);
$newLen = strlen($s);
while($oldLen >= 0) {
if (is_numeric($s[$oldLen])) {
$s[$newLen--] = 'r';
$s[$newLen--] = 'e';
$s[$newLen--] = 'b';
$s[$newLen--] = 'm';
$s[$newLen--] = 'u';
$s[$newLen--] = 'n';
} else {
$s[$newLen--] = $s[$oldLen];
}
$oldLen--;
}
echo $s;
?>
```
### Rust:

View File

@ -300,33 +300,50 @@ int main()
```javascript
// JS中字符串内不可单独修改
// 右旋转
function reverseLeftWords(s, k) {
const reverse = (sList, start, end) => {
for (let i = start, j = end; i < j; i++, j--) {
[sList[i], sList[j]] = [sList[j], sList[i]];
}
}
const sList = Array.from(s);
reverse(sList, 0, sList.length - k - 1);
reverse(sList, sList.length - k, sList.length - 1);
reverse(sList, 0, sList.length - 1);
return sList.join('');
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
const inputs = []; // 存储输入
rl.on('line', function(data) {
inputs.push(data);
}).on('close', function() {
const res = deal(inputs);
// 打印结果
console.log(res);
})
// 对传入的数据进行处理
function deal(inputs) {
let [k, s] = inputs;
const len = s.length - 1;
k = parseInt(k);
str = s.split('');
str = reverseStr(str, 0, len - k)
str = reverseStr(str, len - k + 1, len)
str = reverseStr(str, 0, len)
return str.join('');
}
// 左旋
var reverseLeftWords = function(s, n) {
const reverse = (sList, start, end) => {
for (let i = start, j = end; i < j; i++, j--) {
[sList[i], sList[j]] = [sList[j], sList[i]];
// 根据提供的范围进行翻
function reverseStr(s, start, end) {
while (start < end) {
[s[start], s[end]] = [s[end], s[start]]
start++;
end--;
}
}
const sList = s.split('');
reverse(sList, 0, n - 1);
reverse(sList, n, sList.length - 1);
reverse(sList, 0, sList.length - 1);
return sList.join('');
};
return s;
}
```
### TypeScript
@ -338,10 +355,35 @@ var reverseLeftWords = function(s, n) {
### PHP
```php
<?php
// 反转函数
function reverse(&$s, $start, $end) {
for ($i = $start, $j = $end; $i < $j; $i++, $j--) {
$tmp = $s[$i];
$s[$i] = $s[$j];
$s[$j] = $tmp;
}
}
// 标准输入:读取右旋转位数和字符串
$n = trim(fgets(STDIN));
$s = trim(fgets(STDIN));
// 字符串长度
$len = strlen($s);
// 先部分反转
reverse($s, $len - $n, $len - 1);
reverse($s, 0, $len - $n - 1);
// 再整体反转
reverse($s, 0, $len - 1);
echo $s;
?>
```
### Scala:
### Rust:

View File

@ -186,7 +186,56 @@ int main() {
### Java
### Python
```python
from collections import deque
# 处理输入
n, m = list(map(int, input().strip().split()))
g = []
for _ in range(n):
row = list(map(int, input().strip().split()))
g.append(row)
# 定义四个方向、孤岛面积(遍历完边缘后会被重置)
directions = [[0,1], [1,0], [-1,0], [0,-1]]
count = 0
# 广搜
def bfs(r, c):
global count
q = deque()
q.append((r, c))
g[r][c] = 0
count += 1
while q:
r, c = q.popleft()
for di in directions:
next_r = r + di[0]
next_c = c + di[1]
if next_c < 0 or next_c >= m or next_r < 0 or next_r >= n:
continue
if g[next_r][next_c] == 1:
q.append((next_r, next_c))
g[next_r][next_c] = 0
count += 1
for i in range(n):
if g[i][0] == 1: bfs(i, 0)
if g[i][m-1] == 1: bfs(i, m-1)
for i in range(m):
if g[0][i] == 1: bfs(0, i)
if g[n-1][i] == 1: bfs(n-1, i)
count = 0
for i in range(n):
for j in range(m):
if g[i][j] == 1: bfs(i, j)
print(count)
```
### Go
### Rust

View File

@ -188,7 +188,7 @@ python代码
大家提交代码的热情太高了,我有时候根本处理不过来,但我必须当天处理完,否则第二天代码冲突会越来越多。
<div align="center"><img src='https://code-thinking-1253855093.file.myqcloud.com/pics/20210514091457392.png' width=500 alt=''></img></div>
一天晚分别有两位录友提交了 30多道 java代码全部冲突解决冲突处理的我脖子疼[哭]
一天晚分别有两位录友提交了 30多道 java代码全部冲突解决冲突处理的我脖子疼[哭]
那么在处理冲突的时候 保留谁的代码,删点谁的代码呢?