ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【golang 必备算法】数组篇

2021-09-24 17:37:02  阅读:139  来源: 互联网

标签:return nums int res 必备 golang ++ 算法 func


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

}

标签:return,nums,int,res,必备,golang,++,算法,func
来源: https://www.cnblogs.com/CJ-cooper/p/15331346.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有