笔试
由bq746cbk创建,最终由bq746cbk 被浏览 58 用户
#102
def func(a):
'''
a: 输入数组,已经排好序
返回值:出现次数最多的元素,如果有多个,输出最早出现的
'''
#如果数组为空,返回None
if not a:
return None
#如果数组不为空,定义相关属性
max_element = a[0] #记录最大出现次数的元素
max_count = 1 #记录最大出现次数
current_count = 1 #记录当前元素的出现次数
current_element = a[0] #记录当前正在计数的元素
#遍历数组
for i in range(1, len(a)):
if a[i] == current_element:
current_count += 1 #如果元素与前一个元素相同,当前元素出现次数加1
else: #如果元素与前一个元素不相同(已排序,即较大),进行后续处理
if current_count > max_count: #如果前一个元素出现次数大于最大出现次数,更新相关信息
max_count = current_count
max_element = current_element
current_element = a[i]
current_count = 1
#检查最后一个元素的出现次数
if current_count > max_count:
max_element = current_element
#返回结果
return max_element
#测试用例
assert func([1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5]) == 4 #常规
assert func([]) == None # 空数组 assert func([1]) == 1 #只有一个元素
assert func([1, 1, 1, 2, 2, 3, 3, 3]) == 1 #第一个元素出现次数最多
assert func([1, 2, 3, 4, 5, 6, 7, 8, 8]) == 8 #最后一个元素出现最多
assert func([1, 2, 2, 2, 3, 3, 3]) == 2 #多个相同频次的元素,输出最早出现的
print("所有测试用例通过!")
#103
def func(a):
'''
a: 输入数组,已经排好序
返回值: 输出数组,去掉重复元素
'''
#如果数组为空,返回原数组
if not a:
return a
#如果数组不为空,进行后续处理
i = 0 #记录不重复元素数量-1
#遍历数组
for j in range(1, len(a)):
if a[j] != a[i]: #如果后一个元素不等于后一个元素
i += 1 #不重复元素数量+1
a[i] = a[j] #将不重复元素填入正确的位置
#返回不重复数组
return a[:i+1]
#测试用例
assert func([1, 1, 2, 3, 4, 5, 5, 5, 6]) == [1, 2, 3, 4, 5, 6] #常规
assert func([]) == [] #空数组
assert func([1]) == [1] #只有一个元素
assert func([1, 1, 1, 1, 1]) == [1] #全重复
assert func([1, 2, 3, 4, 5]) == [1, 2, 3, 4, 5] #全不重复
print("所有测试用例通过!")
#104
def func(a, b):
'''
a: 严格递增的有序数组
b: 给定数字
返回值: 和等于给定数字的所有可能情况的数量
'''
#如果数组为空,返回0
if not a:
return 0
#如果数组不为空,定义相关属性
count = 0 #记录满足情况的条件数
left = 0 #左端指向
right = len(a) - 1 #右端指向
while left < right: #当左右指针指向未重合
current_sum = a[left] + a[right] #计算两指针指向元素之和
if current_sum == b: #如果满足条件,计数增加,左右指针分别右移/左移
count += 1
left += 1
right -= 1
elif current_sum < b: #如果元素之和小于给定数,需要更大的元素加和,故左指针右移
left += 1
else: #如果元素之和大于给定数,需要更小的元素加和,故右指针左移
right -= 1
#返回满足情况数量
return count
#测试用例
assert func([], 5) == 0 #空数组
assert func([1, 2], 4) == 0 #不存在满足条件的情况
assert func([1, 2, 3, 4, 5, 6, 9], 8) == 2 #常规:2+6, 3+5
print("所有测试用例通过!")