【LeetCode】数组解法整理收集

6 篇文章 0 订阅
4 篇文章 0 订阅

字符串相加

func addStrings(num1 string, num2 string) string {
    add := 0
    ans := ""
    for l, r := len(num1) - 1, len(num2) -1; l >= 0 || r >= 0 || add > 0; l, r = l-1, r-1 {
        var x, y int
        if l >= 0 {
            x = int(num1[l] - '0')
        }
        if r >= 0 {
            y = int(num2[r] - '0')
        }
        result := x + y + add
        ans = strconv.Itoa(result%10) + ans
        add = result / 10
    } 
    
    return ans
}

反转数组

func rotate(nums []int, k int)  {
    revert(nums)
    revert(nums[:k%len(nums)])
    revert(nums[k%len(nums):])
}

func revert(nums []int) {
    lu := len(nums) - 1
    for i := 0; i < lu; i++ {
        nums[i], nums[lu] = nums[lu], nums[i]
        lu--
    }
}

二分查找

func findMagicIndex(nums []int) int {
    lu := len(nums)
    if lu == 0 {
        return -1
    }
    l, r := 0, lu - 1
    return f(nums, l, r)
}

func f(nums[]int, l, r int) int {
    if l > r {
        return - 1
    }
    mid := l + (r - l)/2
    
    la := f(nums, l, mid-1)
    if nums[mid] == mid {
        return mid
    } else if la != -1 {
        return la
    }
    
    return f(nums, mid+1, r)
}

长度最小的正数组

给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。
暴力法

func leastArr(nums []int, s int) int {
    n := len(nums)
    if n == 0 {
        return 0
    }
    
    sum, ans := 0, math.MaxInt32
    for i :=0; i < n; i++ {
       sum := nums[i]
      for j := i; j < n; i++ {
          sum += num[j]
          if sum >= s {
              ans = min(ans, j-i+1)
              break
          }
      }  
    }
    
    if ans == math.MaxInt32 {
        return 0
    }
    
    return ans
}

快慢指针:

func leastArr(nums []int, s int) int {
    n := len(nums)
    if n == 0 {
        return 0
    }
    
    head, end, sum := 0,0,0
    max := math.MaxInt32
    for end < n {
        sum += nums[end]
        for start < end {
            if sum >= s {
                ans = min(ans, end-head+1)
                sum -= nums[head]
                head++
            }
        }
        end++
    }
    
    if max == math.MaxInt32 {
        return 0
    }
    
    return ans
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值