我在此脚本中正确计算了数组比较吗?

时间:2019-01-26 01:47:41

标签: python arrays numbers

我在下面有一个脚本,该脚本可以找到整数数组中的最小和最大值。目标是在少于 1.5 x N 个比较中完成此任务,其中 N 是输入数组的长度 n_list 。我想问几个问题。

1 :(在 for 循环内)正在将变量最小最大 n 进行比较数组比较?在下面的脚本中,我将其视为一个。如果是这样,为什么会这样呢?我能够找到的定义是,数组比较是在两个数组之间进行的,IMO并不是我真正在做的。

2:如果我没有正确计数,那我在做什么错了?

3:什么是解决此问题的更好方法?

非常感谢,希望您白天/晚上过得愉快:)

 def findExtremes(n_list):

   smallest = n_list[0]
   largest = n_list[0]
   counter = 2 # See above

   for n in n_list:
      if n > largest:
         largest = n
         counter += 1
         continue
      elif n < smallest:
         smallest = n
         counter += 1
         continue
      else:
         counter += 1
         continue

   return(counter)

1 个答案:

答案 0 :(得分:1)

您只计算成功的比较。

当第一个if成功执行时,您已经进行了一次比较,并且正确执行了counter += 1

但是如果您进入elif,则完成了两个比较:n > largestn < largest,因此您需要进行{{1} }。

如果比较失败,您仍然已经进行了两次比较,因此您还需要在counter += 2块中进行counter += 2

您无需在开始时初始化else,应将其设置为counter = 2。您将使用循环中列表的第一个元素来计算两次比较。

实际上,您可能只想跳过这些元素,因为结果是已知的。您可以这样做:

0

跳过它们。如果您应该计算这些不必要的比较,那么初始化for n in n_list[1:]: 是有意义的。

您关于“数组比较”的问题似乎根本不相关。在此问题中,与比较数组无关,您只是在将数组元素与同一数组的其他元素进行比较。

您的算法执行N + 1到2 * N个比较。最好的情况是将数组从最小到最大排序-对每个元素更新counter = 2的测试成功完成,因此不必更新largest。最坏的情况是当其以相反的顺序排序或所有数字都相同时:所有smallest测试均失败,因此它必须测试每个元素以查看其是否为新的largest。平均而言,随机数据趋向于接近最坏的情况,约为1.95 * N。