mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 00:43:04 +08:00
Merge branch 'master' of github.com:youngyangyang04/leetcode-master
This commit is contained in:
@ -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:
|
||||||
|
|
||||||
```Java
|
```Java
|
||||||
|
@ -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
|
||||||
|
|
||||||
```Rust
|
```Rust
|
||||||
|
@ -241,6 +241,33 @@ class Solution:
|
|||||||
|
|
||||||
### Go:
|
### 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
|
```go
|
||||||
func removeDuplicates(s string) string {
|
func removeDuplicates(s string) string {
|
||||||
var stack []byte
|
var stack []byte
|
||||||
|
@ -362,10 +362,43 @@ main();
|
|||||||
|
|
||||||
### Scala:
|
### Scala:
|
||||||
|
|
||||||
|
|
||||||
### PHP:
|
### 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:
|
### Rust:
|
||||||
|
|
||||||
|
|
||||||
|
@ -300,33 +300,50 @@ int main()
|
|||||||
```javascript
|
```javascript
|
||||||
// JS中字符串内不可单独修改
|
// JS中字符串内不可单独修改
|
||||||
|
|
||||||
// 右旋转
|
const readline = require('readline')
|
||||||
function reverseLeftWords(s, k) {
|
|
||||||
const reverse = (sList, start, end) => {
|
const rl = readline.createInterface({
|
||||||
for (let i = start, j = end; i < j; i++, j--) {
|
input: process.stdin,
|
||||||
[sList[i], sList[j]] = [sList[j], sList[i]];
|
output: process.stdout
|
||||||
}
|
})
|
||||||
}
|
|
||||||
const sList = Array.from(s);
|
const inputs = []; // 存储输入
|
||||||
reverse(sList, 0, sList.length - k - 1);
|
|
||||||
reverse(sList, sList.length - k, sList.length - 1);
|
rl.on('line', function(data) {
|
||||||
reverse(sList, 0, sList.length - 1);
|
inputs.push(data);
|
||||||
return sList.join('');
|
|
||||||
|
}).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) {
|
function reverseStr(s, start, end) {
|
||||||
const reverse = (sList, start, end) => {
|
|
||||||
for (let i = start, j = end; i < j; i++, j--) {
|
while (start < end) {
|
||||||
[sList[i], sList[j]] = [sList[j], sList[i]];
|
[s[start], s[end]] = [s[end], s[start]]
|
||||||
|
|
||||||
|
start++;
|
||||||
|
end--;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
const sList = s.split('');
|
return s;
|
||||||
reverse(sList, 0, n - 1);
|
}
|
||||||
reverse(sList, n, sList.length - 1);
|
|
||||||
reverse(sList, 0, sList.length - 1);
|
|
||||||
return sList.join('');
|
|
||||||
};
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### TypeScript:
|
### TypeScript:
|
||||||
@ -338,10 +355,35 @@ var reverseLeftWords = function(s, n) {
|
|||||||
|
|
||||||
### PHP:
|
### 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:
|
### Scala:
|
||||||
|
|
||||||
|
|
||||||
### Rust:
|
### Rust:
|
||||||
|
|
||||||
|
|
||||||
|
@ -186,7 +186,56 @@ int main() {
|
|||||||
### Java
|
### Java
|
||||||
|
|
||||||
### Python
|
### 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
|
### Go
|
||||||
|
|
||||||
### Rust
|
### Rust
|
||||||
|
@ -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>
|
<div align="center"><img src='https://code-thinking-1253855093.file.myqcloud.com/pics/20210514091457392.png' width=500 alt=''></img></div>
|
||||||
|
|
||||||
一天晚分别有两位录友提交了 30多道 java代码,全部冲突,解决冲突处理的我脖子疼[哭]
|
一天晚上分别有两位录友提交了 30多道 java代码,全部冲突,解决冲突处理的我脖子疼[哭]
|
||||||
|
|
||||||
那么在处理冲突的时候 保留谁的代码,删点谁的代码呢?
|
那么在处理冲突的时候 保留谁的代码,删点谁的代码呢?
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user