关于算法的两个例子

简介: 算法例子一:给定一个列表和一个整数,找到两个数的下标,使得这两个数的各为给定的整数,保证肯定仅有一个结果穷举法:def brute_force(li,target): n=len(li) for i in range(0,n): for j in range(i...

算法例子一:给定一个列表和一个整数,找到两个数的下标,使得这两个数的各为给定的整数,保证肯定仅有一个结果

穷举法:

def brute_force(li,target):
    n=len(li)

    for i in range(0,n):
        for j in range(i+1,n):
            if li[i]+li[j]==target:
                return i,j

二分查找法:

def bin_search(li, val):
    low = 0
    high = len(li) - 1

    while low <= high:
        mid = (low + high) // 2
        if li[mid] == val:
            return mid
        elif li[mid] > val:
            high = mid - 1
        else:
            low = mid + 1
    return None

def search_index(li, target):
    li.sort()

    for i in range(0, len(i)):
        j=bin_search(li[i + 1:], target - li[i])
        if j:
            return i,j

方法三

先给列表排序,然后循环遍历列表,如果列表第一个数与列表最后一个数相加的和大于target,把被加数向左偏移一位,

如果列表第一个数与列表最后一个数相加的和小于target,把加数向右偏移一位

如果列表中两个数相加等于target,则返回列表中的两个数的下标

def search_index(li,target):
    li.sort()

    j=len(li)-1

    for i in range(j):
        if li[i] + li[j] < target:
            i += 1
        elif li[i] + li[j] > target:
            j -=1
        else:
            return i,j

算法例子二:给定一个升序列表和一个整数,返回该整数在列表中的下标范围

思路:先使用二分法找到val在列表中的下标,然后把下标分别向左和向中移动,直到下标的值不等于目标整数时返回下标的元组

def bin_search(li,val):
    low=0
    high=len(li)-1

    while low <= high:
        mid=(low + high) // 2

        if li[mid] == val:
            return mid
        elif li[mid] > val:
            high = mid -1
        else:
            low=mid + 1

    return None

def search_index(li,val):
    i=0
    j=0

    mid=bin_search(li,val)
    i=mid-1
    j=mid + 1

    while li[i] ==val:
        i -= 1

    while li[j] == val:
        j += 1

    return (i+1,j-1)
目录
相关文章
|
6月前
|
Python
chatterbot简单例子|4-14
chatterbot简单例子|4-14
|
10月前
|
C#
C#的小例子和总结(四)
C#的小例子和总结(四)
43 1
|
SQL 数据库 关系型数据库
|
算法 Android开发 计算机视觉
stoi的例子
9.51 设计一类,它又三个unsigned成员,分别表示年月日。为其编写构造函数,接受一个表示日期的string参数。 程序如下: #include #include using namespace std; class My_Date { public: My_D...
844 0
as3的InteractivePNG例子
在as3中很多时候需要只能选中png中可视区域,即透明区域“感觉可以穿透”。两张png重叠的时候,鼠标可以分别响应它们的事件。如下图所示: 在网上搜索的时候,看到有人没用其它额外的类,自己写了一个例子。
907 0
|
开发工具
QueryInterface 实现及使用的完整的例子
下面我们将把前面所提到过和各代码段组合起来,以构成一个说明QueryInterface 实现及使用的完整例子。总的来说可以将这些代码分成三部分。第一部分是接口IX、 IY 和 IZ 的定义部分。接口 IUnknown 的定义在 Win32 SDK 的头文件 1 见UNKNWN . H 中。第二部分是组件的实现。类 CA 实现了一个支持 IX 和 IY 接口的组件。QueryInterface的
1341 0
allocator例子
13.39 编写自己的StrVec,包括自己版本的reserve、capacity和resize。 13.40 为StrVec添加一个构造函数,它接受一个initializer_list参数 StrVec.
737 0
|
Java
Java运算符讲解附例子说明(大全)
Java运算符分为六大:算术运算符、赋值运算符、比较运算符、逻辑运算符、条件(三目)运算符、位运算符
113 0
Java运算符讲解附例子说明(大全)