本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《力扣刷题记录——1287. 有序数组中出现次数超过25%的元素、1299. 将每个元素替换为右侧最大元素 、1413. 逐步求和得到正数的最小值 》。 不知不觉刷了100道力扣题啦!接下来转刷蓝桥杯的真题!
目录
1287. 有序数组中出现次数超过25%的元素
题目描述
解题思路
解题代码
1299. 将每个元素替换为右侧最大元素
题目描述
解题思路
解题过程
1413. 逐步求和得到正数的最小值
题目描述
解题思路
解题代码
1287. 有序数组中出现次数超过25%的元素
题目描述
给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%。
请你找到并返回这个整数
示例:
输入:arr = [1,2,2,6,6,6,6,7,10] 输出:6
解题思路
恰好有一个整数超过25%,说明这个整数是出现次数最多的,所以只要找到出现次数最多的元素就可以了。
解题代码
def findSpecialInteger(arr: list[int]) -> int:
num_dic = {}
for i in set(arr):
num_dic[arr.count(i)] = i
return num_dic[max(list(num_dic.keys()))]
1299. 将每个元素替换为右侧最大元素
题目描述
给你一个数组
arr
,请你将每个元素用它右边最大的元素替换,如果是最后一个元素,用-1
替换。完成所有替换操作后,请你返回这个数组。
示例 1:
输入:arr = [17,18,5,4,6,1] 输出:[18,6,6,6,1,-1] 解释: - 下标 0 的元素 --> 右侧最大元素是下标 1 的元素 (18) - 下标 1 的元素 --> 右侧最大元素是下标 4 的元素 (6) - 下标 2 的元素 --> 右侧最大元素是下标 4 的元素 (6) - 下标 3 的元素 --> 右侧最大元素是下标 4 的元素 (6) - 下标 4 的元素 --> 右侧最大元素是下标 5 的元素 (1) - 下标 5 的元素 --> 右侧没有其他元素,替换为 -1示例 2:
输入:arr = [400] 输出:[-1] 解释:下标 0 的元素右侧没有其他元素。
解题思路
用for循环,用列表切割的方式找到最大值,最后一个元素用-1,返回目标元素。
解题过程
def replaceElements(arr: list[int]) -> list[int]:
if len(arr) == 1:
return [-1]
else:
result = []
for i in range(len(arr)):
if i == len(arr)-1:
result.append(-1)
else:
result.append(max(arr[i+1::]))
return result
超出时间限制,arr[i+1::]那里有很大问题,每一次都要开辟新的空间。逆向比较,并且使用动态规划的思想求解。
def replaceElements(arr: list[int]) -> list[int]:
if len(arr) == 1:
return [-1]
else:
n = len(arr) # 获得长度
Max = max(0, arr[n - 1]) # 获得最大值
arr[n - 1] = -1 # 不管结果如何,最后一个都是-1(初始化)
for i in range(n - 2, -1, -1): # 反向迭代倒数两个之前的数(因为最后一组为-1)
temp = arr[i] # 每次迭代获取一次该下标对应的值
arr[i] = Max # 将刚刚得出的最大值存入该位置
Max = max(temp, Max) # 比对最大值,重置最大的
return arr
1413. 逐步求和得到正数的最小值
题目描述
给你一个整数数组
nums
。你可以选定任意的 正数 startValue 作为初始值。你需要从左到右遍历
nums
数组,并将 startValue 依次累加上nums
数组中的值。请你在确保累加和始终大于等于 1 的前提下,选出一个最小的 正数 作为 startValue 。
示例 1:
输入:nums = [-3,2,-3,4,2] 输出:5 解释:如果你选择 startValue = 4,在第三次累加时,和小于 1 。 累加求和 startValue = 4 | startValue = 5 | nums (4 -3 ) = 1 | (5 -3 ) = 2 | -3 (1 +2 ) = 3 | (2 +2 ) = 4 | 2 (3 -3 ) = 0 | (4 -3 ) = 1 | -3 (0 +4 ) = 4 | (1 +4 ) = 5 | 4 (4 +2 ) = 6 | (5 +2 ) = 7 | 2示例 2:
输入:nums = [1,2] 输出:1 解释:最小的 startValue 需要是正数。示例 3:
输入:nums = [1,-2,-3] 输出:5
解题思路
累加通过一个列表记录,返回列表最小值,如果是正数直接返回1,是负数返回相反数+1。
解题代码
def minStartValue(nums: list[int]) -> int:
temp = []
all_num = 0
for i in range(len(nums)):
all_num += nums[i]
temp.append(all_num)
print(temp)
min_num = min(temp)
if min_num >=0:
return 1
else:
return -min_num+1