mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 00:43:04 +08:00
Merge pull request #1009 from leeeeeeewii/master
添加 34. 在排序数组中查找元素的第一个和最后一个位置 Go版本; 添加0283.移动零 python不同方法,Go版本
This commit is contained in:
@ -390,52 +390,49 @@ class Solution:
|
||||
|
||||
```go
|
||||
func searchRange(nums []int, target int) []int {
|
||||
leftBorder := searchLeftBorder(nums, target)
|
||||
rightBorder := searchRightBorder(nums, target)
|
||||
|
||||
if leftBorder == -2 || rightBorder == -2 { // 情况一
|
||||
return []int{-1, -1}
|
||||
} else if rightBorder-leftBorder > 1 { // 情况三
|
||||
return []int{leftBorder + 1, rightBorder - 1}
|
||||
} else { // 情况二
|
||||
return []int{-1, -1}
|
||||
}
|
||||
leftBorder := getLeft(nums, target)
|
||||
rightBorder := getRight(nums, target)
|
||||
// 情况一
|
||||
if leftBorder == -2 || rightBorder == -2 {
|
||||
return []int{-1, -1}
|
||||
}
|
||||
// 情况三
|
||||
if rightBorder - leftBorder > 1 {
|
||||
return []int{leftBorder + 1, rightBorder - 1}
|
||||
}
|
||||
// 情况二
|
||||
return []int{-1, -1}
|
||||
}
|
||||
|
||||
func searchLeftBorder(nums []int, target int) int {
|
||||
left, right := 0, len(nums)-1
|
||||
leftBorder := -2 // 记录一下leftBorder没有被赋值的情况
|
||||
for left <= right {
|
||||
middle := (left + right) / 2
|
||||
if target == nums[middle] {
|
||||
right = middle - 1
|
||||
// 左边界leftBorder更新
|
||||
leftBorder = right
|
||||
} else if target > nums[middle] {
|
||||
left = middle + 1
|
||||
} else {
|
||||
right = middle - 1
|
||||
}
|
||||
func getLeft(nums []int, target int) int {
|
||||
left, right := 0, len(nums)-1
|
||||
border := -2 // 记录border没有被赋值的情况;这里不能赋值-1,target = num[0]时,会无法区分情况一和情况二
|
||||
for left <= right { // []闭区间
|
||||
mid := left + ((right - left) >> 1)
|
||||
if nums[mid] >= target { // 找到第一个等于target的位置
|
||||
right = mid - 1
|
||||
border = right
|
||||
} else {
|
||||
left = mid + 1
|
||||
}
|
||||
return leftBorder
|
||||
}
|
||||
return border
|
||||
}
|
||||
|
||||
func searchRightBorder(nums []int, target int) int {
|
||||
left, right := 0, len(nums)-1
|
||||
rightBorder := -2 // 记录一下rightBorder没有被赋值的情况
|
||||
for left <= right {
|
||||
middle := (left + right) / 2
|
||||
if target == nums[middle] {
|
||||
left = middle + 1
|
||||
// 右边界rightBorder更新
|
||||
rightBorder = left
|
||||
} else if target > nums[middle] {
|
||||
left = middle + 1
|
||||
} else {
|
||||
right = middle - 1
|
||||
}
|
||||
func getRight(nums []int, target int) int {
|
||||
left, right := 0, len(nums) - 1
|
||||
border := -2
|
||||
for left <= right {
|
||||
mid := left + ((right - left) >> 1)
|
||||
if nums[mid] > target {
|
||||
right = mid - 1
|
||||
} else { // 找到第一个大于target的位置
|
||||
left = mid + 1
|
||||
border = left
|
||||
}
|
||||
return rightBorder
|
||||
}
|
||||
return border
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -89,9 +89,33 @@ Python:
|
||||
for i in range(slow, len(nums)):
|
||||
nums[i] = 0
|
||||
```
|
||||
交换前后变量,避免补零
|
||||
```python
|
||||
def moveZeroes(self, nums: List[int]) -> None:
|
||||
slow, fast = 0, 0
|
||||
while fast < len(nums):
|
||||
if nums[fast] != 0:
|
||||
nums[slow], nums[fast] = nums[fast], nums[slow]
|
||||
slow += 1 # 保持[0, slow)区间是没有0的
|
||||
fast += 1
|
||||
```
|
||||
|
||||
Go:
|
||||
|
||||
```go
|
||||
func moveZeroes(nums []int) {
|
||||
slow := 0
|
||||
for fast := 0; fast < len(nums); fast ++ {
|
||||
if nums[fast] != 0 {
|
||||
temp := nums[slow]
|
||||
nums[slow] = nums[fast]
|
||||
nums[fast] = temp
|
||||
slow++
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
JavaScript:
|
||||
```javascript
|
||||
var moveZeroes = function(nums) {
|
||||
|
Reference in New Issue
Block a user