给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%。
请你找到并返回这个整数
示例:
输入:arr = [1,2,2,6,6,6,6,7,10] 输出:6
题目分析:
因为排列是有序的,所以不需要考虑那么复杂,只要在出现相同元素时开始计算该元素出现的次数,次数超过数组长度的25%时就直接返回,否则继续运行
代码:
class Solution:
def findSpecialInteger(self, arr: List[int]) -> int:
threshold = 0.25 * len(arr)
i = 0
while i < len(arr):
count = 1
current_num = arr[i]
j = i + 1
while j < len(arr) and arr[j] == current_num:
count += 1
j += 1
if count > threshold:
return current_num
i = j
return -1
错误代码记录:这是我一开始使用的方法,它的问题在于第二层循环无法运行到最后位置,在倒数第二个位置就必须停止了,否则就会导致索引溢出,因为这里设置了j+1
class Solution:
def findSpecialInteger(self, arr: List[int]) -> int:
sum = 1
i = 0
if len(arr) == 1:
return arr[0]
while i < len(arr)-1:
if arr[i] == arr[i+1]:
j = i + 1
#这里出的问题,提醒大家像这种循环设置了索引+1这种代码就很容易发生溢出的情况,谨慎使用
while j < len(arr)-1:
if arr[j] == arr[j+1]:
sum += 1
j += 1
else:
break
i=j-1
if sum >= 0.25 * len(arr)-1:
return arr[i]
i += 1