LeetCode

计算x的n次幂

  • 思路:采用递归的思想,对于一个数来说,其n次幂等价于本身*其n-1次幂,将此作为递归关系,同时基线条件为n=时,返回1
  • 注意:n可以为负数,当n为负数时,需提前将n转为正数,底变为倒数
  • def pow(x, n):
    if n < 0:
    n = -n
    x = 1/x
    if n == 0:
    return 1
    return x*pow(x, n-1)

最大子序和

  • 思路:采用分治的思想,将其看作三部分的最大值,即左边部分最大子序和,右边部分最大子序和,从中间开始向两边扩展的最大子序和。求左右两部分的最大子序和又可看做若干个子问题,采用递归算法求解。中间部分则当加完某一元素后值变小时停止扩展。

  • def max_sum_arry(nums):
    if len(nums) == 1:
    return nums[0]
    else:
    max_left = max_sum_arry(nums[:len(nums)//2])
    max_right = max_sum_arry(nums[len(nums)//2:])
    max_l = nums[len(nums)//2-1]
    temp = 0
    for i in range(len(nums)//2-1,-1,-1):
    temp += nums[i]
    max_l = max(temp, max_l)
    max_r = nums[len(nums)//2]
    temp = 0
    for i in range(len(nums)//2,len(nums)):
    temp += nums[i]
    max_r = max(temp, max_r)
    return max(max_left,max_right,max_l+max_r)

    多数元素

    • 思路:既然存在一个元素出现次数大于总个数的1/2,那么假设相同值为一颜色,不同值为不同颜色,当相同颜色相遇时累加,不同颜色相遇时抵消,最终剩余部分颜色一定全部相同(至少一个)
    • def find_elements(arry):
      index = 0
      cnt = 0
      start = arry[index]
      i = 0
      for i in range(len(arry)):
      cnt += 1 if arry[i] == start else -1
      if cnt ==0:
      index = i+1
      start = arry[index]
      return start
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值