修改目录名称
This commit is contained in:
92
双指针/三数之和/main.go
Normal file
92
双指针/三数之和/main.go
Normal file
@@ -0,0 +1,92 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sort"
|
||||
)
|
||||
|
||||
func main() {
|
||||
fmt.Println(threeSum([]int{1, -1, -1, 0}))
|
||||
}
|
||||
|
||||
func threeSum(nums []int) [][]int {
|
||||
result := make([][]int, 0)
|
||||
sort.Ints(nums)
|
||||
|
||||
for i := 0; i < len(nums); i++ {
|
||||
if i-1 >= 0 {
|
||||
if nums[i] == nums[i-1] {
|
||||
continue
|
||||
}
|
||||
}
|
||||
left, right := i+1, len(nums)-1
|
||||
for left < right {
|
||||
num := nums[left] + nums[right]
|
||||
if num == -nums[i] {
|
||||
value := make([]int, 0)
|
||||
value = append(value, nums[left], nums[right], nums[i])
|
||||
result = append(result, value)
|
||||
left++
|
||||
right--
|
||||
if left-1 > 0 {
|
||||
for nums[left] == nums[left-1] && left < right {
|
||||
left++
|
||||
}
|
||||
}
|
||||
if right+1 < len(nums) {
|
||||
for nums[right] == nums[right+1] && left < right {
|
||||
right--
|
||||
}
|
||||
}
|
||||
|
||||
} else if num < -nums[i] {
|
||||
left++
|
||||
} else if num >= -nums[i] {
|
||||
right--
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
//func threeSum(nums []int) [][]int {
|
||||
// result := make([][]int, 0)
|
||||
// hash := make(map[int][]int)
|
||||
// result2 := make(map[[3]int]struct{}, 0)
|
||||
// right := len(nums) - 1
|
||||
// for i := 0; i < right+1; i++ {
|
||||
// hash[nums[i]] = append(hash[nums[i]], i)
|
||||
// }
|
||||
// fmt.Println(hash)
|
||||
// for left := 0; left < len(nums); left++ {
|
||||
// for right := left + 1; right < len(nums); right++ {
|
||||
// sum := nums[left] + nums[right]
|
||||
// z := -sum
|
||||
// if value, ok := hash[z]; ok {
|
||||
// for _, v := range value {
|
||||
// if v == left || v == right {
|
||||
// continue
|
||||
// } else {
|
||||
// num := [3]int{nums[v], nums[left], nums[right]}
|
||||
// slice := num[:] // 或直接创建新切片:slice := []int{num[0], num[1], num[2]}
|
||||
// sort.Ints(slice)
|
||||
// result2[[3]int(slice)] = struct{}{}
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// continue
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// fmt.Println("result2", result2)
|
||||
// for k, _ := range result2 {
|
||||
// value := make([]int, 0)
|
||||
// for _, v := range k {
|
||||
// value = append(value, v)
|
||||
// }
|
||||
// result = append(result, value)
|
||||
// }
|
||||
// return result
|
||||
//}
|
||||
32
双指针/快速排序/main.go
Normal file
32
双指针/快速排序/main.go
Normal file
@@ -0,0 +1,32 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
arr := []int{2, 35, 5, 33, 7, 8, 9, -2}
|
||||
fmt.Println(partition(arr, 0, len(arr)-1))
|
||||
fmt.Println("排序结果:", arr) // 输出: [-2 2 5 7 8 9 33 35]
|
||||
}
|
||||
|
||||
func quickSort(arr []int, low, high int) {
|
||||
if low >= high {
|
||||
return
|
||||
}
|
||||
pivotIndex := partition(arr, low, high)
|
||||
quickSort(arr, low, pivotIndex-1) // 递归左子数组
|
||||
quickSort(arr, pivotIndex+1, high) // 递归右子数组
|
||||
}
|
||||
|
||||
func partition(arr []int, low, high int) int {
|
||||
pivot := arr[high] // 选择最后一个元素为基准值
|
||||
i := low - 1 // i标记小于基准值的边界
|
||||
for j := low; j < high; j++ {
|
||||
if arr[j] <= pivot {
|
||||
i++
|
||||
arr[i], arr[j] = arr[j], arr[i] // 交换小于基准值的元素到左侧
|
||||
}
|
||||
}
|
||||
// 将基准值放到正确位置
|
||||
arr[i+1], arr[high] = arr[high], arr[i+1]
|
||||
return i + 1
|
||||
}
|
||||
25
双指针/盛最多的水/main.go
Normal file
25
双指针/盛最多的水/main.go
Normal file
@@ -0,0 +1,25 @@
|
||||
package main
|
||||
|
||||
func main() {
|
||||
|
||||
}
|
||||
func maxArea(height []int) int {
|
||||
|
||||
left := 0
|
||||
right := len(height) - 1
|
||||
maxscore := 0
|
||||
for left < right {
|
||||
temp := min(height[left], height[right]) * (right - left)
|
||||
if temp > maxscore {
|
||||
maxscore = temp
|
||||
}
|
||||
if height[left] < height[right] {
|
||||
left++
|
||||
} else {
|
||||
right--
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return maxscore
|
||||
}
|
||||
18
双指针/移动零/main.go
Normal file
18
双指针/移动零/main.go
Normal file
@@ -0,0 +1,18 @@
|
||||
package main
|
||||
|
||||
func main() {
|
||||
moveZeroes([]int{0, 1, 0, 3, 12})
|
||||
}
|
||||
func moveZeroes(nums []int) {
|
||||
slow := 0
|
||||
for slow < len(nums) {
|
||||
for fast := slow + 1; fast < len(nums); fast++ {
|
||||
if nums[slow] == 0 {
|
||||
nums[slow], nums[fast] = nums[fast], nums[slow]
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
slow++
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user