LeetCode Practice Journal | Day1_数组(go)
1、leetcode704(二分查找)
引用文本
1.题目链接:https://leetcode.cn/problems/binary-search/description/
注意区间
输入输出版,左闭右闭
代码
// go带输入输出
package main
import "fmt"
func search(nums []int, target int) int {
len := len(nums)
left := 0
right := len - 1
for left <= right {
mid := (left + right) / 2
if nums[mid] == target {
return mid
} else if nums[mid] > target {
right = mid - 1
} else {
left = mid + 1
}
}
return -1
}
func main() {
for {
t := 0
fmt.Scanln(&t)
var m int
a, _ := fmt.Scanln(&m)
if a == 0 {
return
}
num := make([]int, m)
for i := 0; i < m; i++ {
fmt.Scan(&num[i])
}
var res int
res = search(num, t)
fmt.Println(res)
}
}
2、leetcode27(移除元素)
引用文本
1.题目链接:https://leetcode.cn/problems/remove-element/description/
注意暴力的细节i–
双指针以及双指针优化方法
暴力代码
// 暴力
func removeElement(nums []int, val int) int {
len:= len(nums)
for i:=0;i<len;i++{
if nums[i]==val{
for j:=i+1;j<len;j++{
nums[j-1] = nums[j]
}
i-- //注意这里的细节!!!!
len--
}
}
return len
}
双指针代码
// 双指针
func removeElement(nums []int, val int) int {
len := len(nums)
slow := 0
fast := 0
for fast<len{
if nums[fast]!=val{
nums[slow] = nums[fast]
slow++
}
fast++
}
return slow
}
双指针优化代码(左右双向指针)
// 双指针
func removeElement(nums []int, val int) int {
left, right := 0, len(nums)
for left < right {
if nums[left] == val {
nums[left] = nums[right-1]
right--
} else {
left++
}
}
return left
}