编程题:
1.编写函数,输入2个有序列表,列表数据类型只有整数,不使用排序算法,输出合并后的有序列表。
思路:不用排序算法,只用一一对比
def merge_sorted_lists(list1, list2): merged_list = [] i, j = 0, 0 # 初始化两个指针 # 遍历两个列表,比较当前元素,按顺序添加到 merged_list while i < len(list1) and j < len(list2): if list1[i] < list2[j]: merged_list.append(list1[i]) i += 1 else: merged_list.append(list2[j]) j += 1 # 如果 list1 中还有剩余元素,添加到 merged_list while i < len(list1): merged_list.append(list1[i]) i += 1 # 如果 list2 中还有剩余元素,添加到 merged_list while j < len(list2): merged_list.append(list2[j]) j += 1 return merged_list
2.小明在爬楼梯,有N个台阶,每一次,小明可以爬1或者2个台阶,计算不同台阶的楼梯小明有多少种不同方式爬到顶部。
思路:求最大,动态规划。递归方法
- 最后到达第n个台阶的方法有从n-1阶跳1步,或者从n-2阶跳2步。得到方式数量的递推关系如下:
- 确定边界条件:
def climb_stairs(n): # 边界条件 if n <= 0: print(0) return elif n == 1: print(1) return elif n == 2: print(2) return # 创建一个数组来存储每个台阶的方法数:到达每个台阶的方法数量 ways = [0] * (n + 1) # 为什么是n+1? ways[1] = 1 # 1个台阶,第一个台阶,有1个方法 ways[2] = 2 # 2个台阶,第二个台阶,有2个方法 # 填充数组,从第3个台阶开始 for i in range(3, n + 1): ways[i] = ways[i - 1] + ways[i - 2] # 打印爬到楼梯顶部的方式数量 print(ways[n])
def climb_stairs(n): if n <= 0: print(0) return elif n == 1: print(1) return elif n == 2: print(2) return # 用两个变量来保存前两个台阶的方法数 prev1 = 1 # ways(1) prev2 = 2 # ways(2) # 从第3个台阶开始计算 for i in range(3, n + 1): current = prev1 + prev2 # 当前台阶的方法数 prev1 = prev2 # 更新 prev1 为 prev2 prev2 = current # 更新 prev2 为 current # 打印爬到楼梯顶部的方式数量 print(prev2) # 输入台阶数 n = int(input("请输入台阶数: ")) # 调用函数 climb_stairs(n)