[Python]求助一道Python题,求数组最小值

2024-05-11

1. [Python]求助一道Python题,求数组最小值

按照题目要求编写的程序如下(见图)


[Python]求助一道Python题,求数组最小值

2. 【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]与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))

3. “python”数组中有几个是最小值?分别是什么?

5个[3, 11, 23, 24, 30]。
1.首先,对于一个list类型,添加value通常用append,这个是记得比较清楚的,但是几次遇到求几个最小值的位置,每次都花了很多功夫解决,每次都忘记了又重新查怎么办!

2.现在第一步来看,最小值一般用min(list),得到这个list里面的最小值!
3.现在第二步来看,最小值的位置,list.index(min_value),用index的命令知道最小值在list所在的位置!
4.现在第三步来看,几个最小值的位置,这个稍微麻烦,但是我又不想引入其他的包,于是只有在现有的基础上进行一些繁琐的工作!
5.假设求list里面N个最小值的位置
temp=[]
Inf=1000000000
for i in range(N):
temp.append(list.index(min(list)))
temp[list.index(min(list))]=Inf
6.基本的原理就是把原先最小值的位置用一个极其大的数字顶替,那么第二个最小值的位置就变成了当前最小值的位置!如此循环,可以很容易找到N个最小值的位置!

“python”数组中有几个是最小值?分别是什么?