【golang 必备算法】数组篇

2021/9/24 17:40:36

本文主要是介绍【golang 必备算法】数组篇,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

704. 二分查找

力扣链接

注意边界问题

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
}

27. 移除元素

力扣链接

解法一:

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)
}

977.有序数组的平方

力扣链接

双指针
创建一个和原来数组一样大小的数组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
}

209.长度最小的子数组

滑动窗口

力扣链接

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
    }
}

59. 螺旋矩阵 II

力扣链接

Picture1.png
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

}


这篇关于【golang 必备算法】数组篇的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程