首页 > 编程知识 正文

常值函数绝对可积吗,含绝对的值方程的解法

时间:2023-05-05 22:40:42 阅读:240432 作者:572

1. 绝对值最⼩的数

有⼀个已经排好序的整数序列(升序,⽆重复项),序列中可能有正整数、负整数或者 0,请⽤你认为
最优的⽅法求序列中绝对值最⼩的数。要求不能使⽤顺序⽐较的⽅法(时间复杂度需要⼩于 O(n)),
不能使⽤内置查找函数,可以⽤任何语⾔实现。
输⼊:⼀个有序的整数序列。
输出:绝对值最⼩的数。

问题属于"连续顺序文件的查找” 问题

1.1顺序查找

定义:从有序的组合中,从第一个元素开始进行比较,选择需要的的元素;

时间复杂度为:O(n)

def seq_search(arr): arr_min=arr[0] for x in arr[1:]: if abs(x)<abs(arr_min): arr_min=x else: break return arr_minif __name__ == '__main__': arr=[-3,-2,-1,2,3] print(seq_search(arr))

1.2折半查找/二分查找(仅适合排序的连续顺序组合)

查找条件:

1.如果有序的组合元素都大于等于0,则返回第一个元素;

2.如果有序的组合元素都小于等于0,则返回最后一个元素;

3.正负数同时存在时,查找位置为:该位置元素大于等于0,前一个元素小于0,返回绝对值较小的

def lmdsj_search(arr): if arr[0]>=0: return arr[0] elif arr[-1]<=0: return arr[-1] else: low, high = 0, len(arr) - 1 while True: mid = (low + high) // 2 if arr[mid]>=0 and arr[mid-1]<0: if abs(arr[mid])<abs(arr[mid-1]): return arr[mid] else: return arr[mid-1] elif arr[mid]>0: high=mid elif arr[mid]<0: low=midif __name__ == '__main__': arr=[-4,-3,-2,-1,2,3] print(lmdsj_search(arr))

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。