力扣链接
注意边界问题
func search(nums []int, target int) int { r,l,mid:=0,len(nums)-1,(len(nums)-1)/2 for l>=r{ mid = (r+l)/2 if nums[mid]==target{ return mid }else if nums[mid]>target{ l=l-1 }else{ r=r+1 } } return -1 }
力扣链接
解法一:
func removeElement(nums []int, val int) int { res:=0 for _,v:=range nums{ if v!=val{ nums[res]=v res++ } } return res }
解法二(双指针):
func removeElement(nums []int, val int) int { i:=0 j:=0 for j<len(nums){ if nums[j]==val{ j++ }else{ nums[i]=nums[j] i++ j++ } } return len(nums)-(j-i) }
力扣链接
双指针
创建一个和原来数组一样大小的数组res
比较头指针和尾指针指向数的平方和,将大的数存在res[k--]中
func sortedSquares(nums []int) []int { l:=len(nums) res:=make([]int,l) i,j:=0,l-1 k:=j for i<=j{ if nums[i]*nums[i]>=nums[j]*nums[j]{ res[k]= nums[i]*nums[i] i++ }else{ res[k]= nums[j]*nums[j] j-- } k-- } return res }
滑动窗口
力扣链接
func minSubArrayLen(s int, nums []int) int { sum:=0 start:=0 end:=0 a:=math.MaxInt32 for end<len(nums){ sum=sum+nums[end] for sum>=s{ sum=sum-nums[start] a=min(a,end-start+1) start++ } end++ } if a==math.MaxInt32{ return 0 }else{ return a } } func min(x int,y int)int{ if x>y{ return y }else{ return x } }
力扣链接
func generateMatrix(n int) [][]int { arr:=make([][]int,n) for k,_:=range arr{ arr[k]=make([]int,n) } top, bottom := 0, n-1 left, right := 0, n-1 m:=1 for m<=n*n{ for i:=left;i<=right;i++{ arr[top][i]=m m++ } top++ for i:=top;i<=bottom;i++{ arr[i][right]=m m++ } right-- for i:=right;i>=left;i--{ arr[bottom][i]=m m++ } bottom-- for i:=bottom;i>=top;i--{ arr[i][left]=m m++ } left++ } return arr }