pythonmid
⑴ 【python】数组中绝对值最小的数
题目:有一个升序的数组,数组中可能有正数、负数或者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、如下图,要提取#后面的字符,也即红色的“SDK”到B列。