【第一题】
给定数组A和B,数组A是几乎严格升序的,几乎的定义是只需改变其中一个数,即可满足完全升序序列。
要求:从A中找到这个数字,并从B中选取一个数字将其替换,使得数组A是严格升序的。(不允许相邻两个为相同的数)。请找出B中满足要求的最大数字,并输出最终有序的数组。如果不存在就输出NO。
我的思路(通过率75%):遍历A数组,找到a[i] >= a[i-1]的位置,然后记录a[i-1]和a[i+1]的值,在数组B中查找是否存在该范围内的值。
看到的一个100%通过率思路:在找到a[i] >= a[i+1]的位置后,先看看能不能换掉i+1位置的数,让数组a有序(因为要找b中最大的数),如果不行,就看能不能换掉i位置的数让数组a有序,如果还是不行就输出NO。
对比区别:比如A数组为[1,20, 5, 40], 当找到5这个数字之后,我的做法是直接把5替换掉,也就是在B中找[21,39]范围内的数,找不到直接返回No了。但是参考的解法里面,先尝试换掉5(因为先换后面的能保证整个数组尽可能的大),也就是说只要B数组中存在[21, 39]的数字,都是可以的;如果换掉5不可行,再尝试换掉20,在B中找[1,4]范围内的数.(思路很巧妙)
def func(nums1, nums2):
if not nums1 or not nums2:
print('NO')
index = 0
min_value, max_value = float('-inf'), float('inf')
flag1 = False # 替换掉波谷的那个数(最小的数)
flag2 = False # 替换掉波谷前面那个大的数
for i in range(1, len(nums1)):
if nums1[i] < nums1[i - 1]:
min_value = nums1[i