日常算法代码简单实现

  • 根据给定一组既定数组去重置列表内元素顺序为_index_map 的顺序
 _index_map = [4, 0, 1, 2, 3, 5, 11, 8, 10, 6, 12 ]
 bank_credit_amount_differences_array_reset_data = [[row[_index_map[i][j]] for j in range(len(row))] for
                                                       i, row inenumerate(bank_credit_amount_differences_array)]
  • 根据给定数组 和 指定数字 返回 指定数字在数组中的位置 二分查找实现
def find_closest_index_v2(arr, num):
        根据给定数组 和 指定数字 返回 指定数字在数组中的位置 二分查找实现
    # arr.sort() # 对数组进行排序
    left, right = 0, len(arr) - 1
    while left <= right:
        mid = (left + right) // 2  
        if arr[mid] == num:
            if mid == len(arr) - 1 or arr[mid + 1] != num:
                return mid
            else:
                left = mid + 1
        elif arr[mid] < num:
            left = mid + 1
        else:
            right = mid - 1

    if left >= len(arr):
        return len(arr) - 1
    elif right < 0:
        return 0
    else:
        if abs(num - arr[left]) <= abs(num - arr[right]):  # 取值范围
            return left
        else:
            return right
            
arr = [15.83, 17.75, 37.92, 40.0, 40.0, 40.0, 80.0, 80.0, 180.0, 200.0, 200.0, 249.0, 342.75, 500.0, 500.0, 500.0, 500.0, 500.0]
num = 83.33

find_closest_index_v2(arr, num)

  • 最简单二分查找实现
    def binary_search_last(self, nums, target):
         '''
         	nums : 有序数组
         	target: 目标值
         '''
       left = 0
       right = len(nums) - 1
       while left <= right:
           mid = (left + right) // 2
           if nums[mid] == target: 
               if mid == len(nums) - 1 or nums[mid + 1] != target:
                   return mid
               else:
                   left = mid + 1
           elif nums[mid] < target:
               left = mid + 1
           else:
               right = mid - 1
       return -1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值