当前位置:实例文章 » 其他实例» [文章]曲阜师范大学2023年暑期大一新生排位赛 题解

曲阜师范大学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年暑期大一新生排位赛的题解。

相关标签:objective-ciosmacoscocoa
其他信息

其他资源

Top