刷题笔记day01-数组

704 题

主要强调,左闭右闭的情况,就是每次查询都会和 [left, right] 进行比较。所以后面的都是mid-1,mid+1 的情况。

package main

func search(nums []int, target int) int {
	// 二分查找方法
	// 每次查找都是左闭右闭的情况
	left := 0
	right := len(nums) - 1
	var mid int
	for left <= right {
		mid = left + ((right - left) >> 1)
		if target > nums[mid] {
			left = mid + 1
		} else if target < nums[mid] {
			right = mid - 1
		} else {
			return mid
		}
	}
	return -1
}

func main() {
	res := search([]int{-1, 0, 3, 5, 9, 12}, 9)
	println(res)
}

27 移除元素

思路:直观的想法就是,遇到等于val的时候,之后后面的往前面一个个覆盖,类似于是插入排序。
// 使用快慢指针的方法,

快指针一定指向不是val的元素
相当于是遇到等于不等与的情况,slow++,然后和fast换
当遇到等于的情况,slow就指向val了,

func removeElement(nums []int, val int) int {
    // 使用快慢指针的方法,直观的想法就是,遇到等于val的时候,之后后面的
    var slow  = 0
    for fast := 0; fast < len(nums); fast++ {
        if nums[fast] != val {
            nums[slow] = nums[fast] 
            slow++
        }
    }
    return slow
}

你可能感兴趣的:(笔记,算法,排序算法)