【python】数组中绝对值最小的数?

供稿:hz-xin.com     日期:2025-01-14
题目:有一个升序的数组,数组中可能有正数、负数或者0,求数组中元素的绝对值最小的数。例如,数组[-10, -5, -2, 7, 15, 50],该数组中绝对值最小的数是-2。

分析:二分法。该题可分为以下三种情况:

(1)如果数组第一个元素为非负数,那么minNum = arr[0]

(2)如果数组最后一个值为负数,那么minNum = arr[-1]。

(3)如果数组中既有正数又有负数,首先找到正数与负数的分界点,如果分界点恰好为0,那么0为最小值。否则通过比较分界点左右的正数与负数的绝对值来确定最小数。

如何查找正数与负数的分界点呢?采用二分法,主要思路:取数组中间位置的值a[mid],并将它与0值比较,比较结果分为如下三种情况:

(1)如果a[mid] == 0,那么这个数就是绝对值最小的数。

(2)如果a[mid] > 0,a[mid - 1] < 0,那么通过比较a[mid]与a[mid - 1]的绝对值就可以找到数组中绝对值最小的数;如果a[mid - 1] == 0, 那么a[mid - 1]就是要找的数;否则接着在数组的左半部分查找。

(3)如果a[mid] < 0,a[mid + 1] > 0,那么通过比较a[mid]与a[mid +1]的绝对值就可以找到数组中绝对值最小的数;如果a[mid + 1] == 0, 那么a[mid + 1]就是要找的数;否则接着在数组的右半部分查找。

code:

def findMinNum(arr):

    if arr is None or len(arr) <= 0:

        return

    # [1] 数组中没有负数

    if arr[0] >= 0:

        return arr[0]

    # [2] 数组中没有正数

    if arr[-1] <= 0:

        return arr[-1]

    # [3] 数组中既有正数又又负数

    mid = None

    absMin = None

    begin = 0

    end = len(arr) - 1

    while begin < end:

        mid = begin + (end - begin) >> 1

        # 如果arr[mid] == 0,则是绝对值最小的数

        if arr[mid] == 0:

            return 0

        # 如果大于0, 正负数的分界点在左侧

        elif arr[mid] > 0:

            # 继续在数组的左半部分查找

            if arr[mid - 1] > 0:

                end = mid - 1

            elif arr[mid - 1] == 0:

                return 0

            # 找到正负数的分界点

            else:

                break  # 如果小于0, 在数组右半部分查找

        else:

            # 在数组的右半部分继续查找

            if arr[mid + 1] < 0:

                begin = mid + 1

            elif arr[mid + 1] == 0:

                return 0

            else:

                break

    # 获取正负数分界点处绝对值最小的值

    if (arr[mid] > 0):

        if arr[mid] < abs(arr[mid - 1]):

            absMin = arr[mid]

        else:

            absMin = arr[mid - 1]

    else:

        if abs(arr[mid]) < abs(arr[mid + 1]):

            absMin = arr[mid]

        else:

            absMin = arr[mid + 1]

    return absMin

if __name__ == "__main__":

    arr = [-10, -5, -2, 7, 15, 50]

    print(findMinNum(arr))

【python】数组中绝对值最小的数?
(1)如果a[mid] == 0,那么这个数就是绝对值最小的数。(2)如果a[mid] > 0,a[mid - 1] < 0,那么通过比较a[mid]与a[mid - 1]的绝对值就可以找到数组中绝对值最小的数;如果a[mid - 1] == 0, 那么a[mid - 1]就是要找的数;否则接着在数组的左半部分查找。(3)如果a[...

python 求数值绝对值最小值并返回原值
lst=[5,3,4,-6,-2,-9]minabs=abs(lst[0])minele=lst[0]for l in lst: if abs(l)<minabs: minabs=abs(l) minele=lprint('min abs=%s;minele=%s'%(minabs,minele))这是返回最左边的绝对值最小的元素,要想返回最右边的绝对值最小的元素把<改成<=就可以了。不明白...

python计算输入标准输入的三个数中绝对值最小的数
minNum = Nonefor i in range(1,3+1): print('请输入第%s个数:' % i,end='') num = int(input()) if not minNum: minNum = num if abs(minNum) > abs(num): minNum = numprint('绝对值最小的是:%s' % minNum)

【Python小白】输入三个数字,求绝对值最小的数?
s = input()arr = [int(i) for i in s.split(" ")]min_value = min(arr,key = abs)print(" ".join([str(i) for i in arr if abs(i) == min_value]))用python内置的排序吧,你这个排序写的有点问题

python编程 输入一组整数数组,求出两两之差的最小绝对值。只需得出...
a.sort(reverse = True) #首先对这组数进行从大到小的排序 print a #输出排序结果 min = a[0] #令min变量记录该列表中最大的值 for i in range( len(a) -1 ): #i用来控制列表下标, 元素个数-1为了防止下面的相减越界 if a[i] - a[i+1] < min: #当前一个数减...

绝对值最小的正整数是多少
绝对值最小的正整数是1。我们要理解绝对值的含义。在数学中,绝对值是一个数距离原点的距离。对于正整数,这个距离是他们本身。例如,绝对值是5的正整数是5和-5。其中,5是距离原点最远的点,即绝对值最大的正整数。相对应的,绝对值最小的正整数就是1,因为1是所有正整数中离原点最近的。我们...

python比较三个数绝对值大小并输出最大值?
c):print("最大值是", b)else:print("最大值是", c)```在这个示例中,我们使用input()函数来获取用户输入的三个数字,并将它们转换为整数类型。然后,我们使用if语句来比较它们的绝对值大小,并输出最大值。请注意,在这个示例中,我们在比较大小之前使用了abs()函数来获取每个数字的绝对值。

python中n个数字按照绝对值大小排序,求解答
list = [36, 5, -12, 9, -21]list = sorted(list, key=abs)print(list)输出:[5, 9, -12, -21, 36]这么写才对吧

python数组最大多少位(python求数组最小值)
获取数组中绝对值最大的数 x = [3, 2.2, -7.4, 6, 4]max(x, key=abs) # 返回 -7.4 lambda表达式形式 x = [3, 2.2, -7.4, 6, 4]max(x, key=lambda x: abs(x)) # 返回 -7.python 最多可以装满多少个32位python的限制是536870912个元素,64位python的限制是...

Python列出多个数字组合相加的和最接近或等于某个数的算法?
算法 列出这5个数的所有组合,找出组合的和减268的绝对值最小的组合,完整的Python程序如下 import math def combine(a,n,num):real_size=int(math.pow(2, n))min=abs(sum(a)-num)min_comb=[]for i in range(real_size):min_list=[]total=0 for j in range(n):if i & (1 << j)...