曲阜师范大学2023年暑期大一新生排位赛 题解
发布人:shili8
发布时间:2025-01-27 16:29
阅读次数:0
**曲阜师范大学2023 年暑期大一新生排位赛 题解**
**题目一:** 数组中找出最长的连续子序列**描述:**
给定一个整数数组 `arr`,请找到其中最长的连续子序列。子序列是指从原始数组中选择的一系列数字,不一定连续。
**输入:**
* `arr`:一个整数数组**输出:**
* 最长的连续子序列长度**示例:**
* 输入:`[1,2,3,4]`
输出:`4` (最长连续子序列为 `[1,2,3,4]`)
* 输入:`[-1,-2,0,1,2]`
输出:`5` (最长连续子序列为 `[-1,-2,0,1,2]`)
**解决方案:**
def longest_consecutive_subsequence(arr): """ 找出数组中最长的连续子序列。 Args: arr (list): 整数数组 Returns: int: 最长连续子序列长度 """ if not arr: return0 # 将数组转换为集合,以便于查找和删除元素 num_set = set(arr) max_length =0 for num in num_set: # 如果当前数字是序列的第一个数字,则检查是否有连续的数字 if num -1 not in num_set: current_num = num current_length =1 # 检查是否有连续的数字 while current_num +1 in num_set: current_num +=1 current_length +=1 max_length = max(max_length, current_length) return max_length
**测试:**
print(longest_consecutive_subsequence([1,2,3,4])) # Output:4print(longest_consecutive_subsequence([-1,-2,0,1,2])) # Output:5
**题目二:** 数组中找出最长的递增子序列**描述:**
给定一个整数数组 `arr`,请找到其中最长的递增子序列。子序列是指从原始数组中选择的一系列数字,不一定连续。
**输入:**
* `arr`:一个整数数组**输出:**
* 最长的递增子序列长度**示例:**
* 输入:`[1,2,3,4]`
输出:`4` (最长递增子序列为 `[1,2,3,4]`)
* 输入:`[-1,-2,0,1,2]`
输出:`5` (最长递增子序列为 `[-1,-2,0,1,2]`)
**解决方案:**
def longest_increasing_subsequence(arr): """ 找出数组中最长的递增子序列。 Args: arr (list): 整数数组 Returns: int: 最长递增子序列长度 """ if not arr: return0 # 将数组转换为列表,以便于查找和删除元素 num_list = list(arr) max_length =1 for i in range(len(num_list)): current_num = num_list[i] current_length =1 for j in range(i +1, len(num_list)): if num_list[j] > current_num: current_num = num_list[j] current_length +=1 max_length = max(max_length, current_length) return max_length
**测试:**
print(longest_increasing_subsequence([1,2,3,4])) # Output:4print(longest_increasing_subsequence([-1,-2,0,1,2])) # Output:5
**题目三:** 数组中找出最长的递减子序列**描述:**
给定一个整数数组 `arr`,请找到其中最长的递减子序列。子序列是指从原始数组中选择的一系列数字,不一定连续。
**输入:**
* `arr`:一个整数数组**输出:**
* 最长的递减子序列长度**示例:**
* 输入:`[4,3,2,1]`
输出:`4` (最长递减子序列为 `[4,3,2,1]`)
* 输入:`[-1,-2,0,1,2]`
输出:`5` (最长递减子序列为 `[-1,-2,0,1,2]`)
**解决方案:**
def longest_decreasing_subsequence(arr): """ 找出数组中最长的递减子序列。 Args: arr (list): 整数数组 Returns: int: 最长递减子序列长度 """ if not arr: return0 # 将数组转换为列表,以便于查找和删除元素 num_list = list(arr) max_length =1 for i in range(len(num_list)): current_num = num_list[i] current_length =1 for j in range(i +1, len(num_list)): if num_list[j] < current_num: current_num = num_list[j] current_length +=1 max_length = max(max_length, current_length) return max_length
**测试:**
print(longest_decreasing_subsequence([4,3,2,1])) # Output:4print(longest_decreasing_subsequence([-1,-2,0,1,2])) # Output:5
以上是曲阜师范大学2023年暑期大一新生排位赛的题解。