数组:求绝对值最小的数是多少

问题描述: 有一个升序排列 的数组,数组中可能有正数,负数,0,求数组中元素的绝对值最小的数。 分析: 分三种情况: 1)如果数组第一个元素为非负数,那么绝对值最小的数肯定为数组的第一个元素。 2)如果数组的最后一个元素为负数,那么绝对值最小的数肯定为数组的最后一个元素。 3)数组中既有正数又有负数时,首先找到正数与负数的分界点,如果分界点恰好为0,那么0就是绝对值最小的数

问题描述:

有一个升序排列的数组,数组中可能有正数,负数,0,求数组中元素的绝对值最小的数。

分析:

分三种情况:

1)如果数组第一个元素为非负数,那么绝对值最小的数肯定为数组的第一个元素。

2)如果数组的最后一个元素为负数,那么绝对值最小的数肯定为数组的最后一个元素。

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

查找正数与负数的分界点:

1)顺序遍历数组,找出第一个非负数(前提是数组中既有正数又有负数),接着通过比较分界点两个数的值来找出绝对值最小的数。最坏情况下 的时间复杂度为O(n).

2)二分法查找正数与负数的分界点的方法。取数组中间位置的值为 a[mid] ,

a[mid] = 0, a[mid] 为绝对值最小的数

a[mid] > 0 , 如果a[mid-1] <0, 找到分界点,比较 a[mid] 与 a[mid-1] 的绝对值就可以找到数组中绝对值最小的数

如果 a[mid-1] = 0, a[mid-1] 就是要找的数

a[mid-1] > 0, 在数组的左半部分找

a[mid] < 0, 如果 a[mid +1] >0, 找到分界点,比较 a[mid] 与 a[mid + 1] 的绝对值就可以找到数组中绝对值最小的数

如果

知秋君
上一篇 2024-07-19 22:36
下一篇 2024-07-19 22:02

相关推荐