AI量化知识树

笔试

由bq746cbk创建,最终由bq746cbk 被浏览 31 用户

#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("所有测试用例通过!")

标签

算法Python
{link}