Python 代码段 传统算法相关

Python 代码段

二分查找

def lower_bound(array, first, last, value):
    # 返回[first, last)内第一个不小于value的值的位置
    while first < last: # 搜索区间[first, last)不为空 
        mid = first + (last - first) // 2 # 防溢出 
        if array[mid] < value: 
            first = mid + 1 
        else: 
            last = mid 
    return first # last也行,因为此时重合
def upper_bound(array, first, last, value):
    # 返回[first, last)内第一个大于value的位置
    while first < last: # 搜索区间[first, last)不为空 
        mid = first + (last - first) // 2 # 防溢出 
        if array[mid] <= value: 
            first = mid + 1 
        else: 
            last = mid 
    return first # last也行,因为此时重合

[first, last)中与value 等价的元素的范围就是:[lower_bound(value), upper_bound(value)) ,(左闭)下界和(右开)上界

// 无重复元素搜索时,更方便
func search(nums []int, target int) int {
    start := 0
    end := len(nums) - 1
    for start <= end {
        mid := start + (end-start)/2
        if nums[mid] == target {
            return mid
        } else if nums[mid] < target {
            start = mid+1
        } else if nums[mid] > target {
            end = mid-1
        }
    }
    // 如果找不到,start 是第一个大于target的索引
    // 如果在B+树结构里面二分搜索,可以return start
    // 这样可以继续向子节点搜索,如:node:=node.Children[start]
    return -1
}

位操作统计二进制中 1 的个数

count = 0  
while a: 
  a = a & (a - 1);  
  count += 1;  
}

3行代码解一元一次方程

def solve(eq, var='x'):
    eq1 = eq.replace("=", "-(") + ")"
    c = eval(eq1, {var:1j})
    return -c.real/c.imag

solve("x - 2*x + 5*x - 46*(235-24) = x + 2")  # 3236.0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值