当前位置:实例文章 » 其他实例» [文章]代码随想录额外题目| 数组03 ●34排序数组查首尾位置 ●922按奇偶排序数组II●35搜索插入位置

代码随想录额外题目| 数组03 ●34排序数组查首尾位置 ●922按奇偶排序数组II●35搜索插入位置

发布人:shili8 发布时间:2025-03-13 22:11 阅读次数:0

**代码随想录 题目03: 排序数组查首尾位置**

在这个问题中,我们需要实现一个函数,能够对一个给定的整数数组进行排序,并返回该数组的首位和末位元素。

**题目描述**

给定一个长度为 `n` 的整数数组 `nums`,请设计一个算法来找到该数组的首位和末位元素。首位元素是指第一个大于或等于 `0` 的数字,而末位元素是指最后一个小于或等于 `0` 的数字。

**示例1**

输入:`nums = [0,1,2, -1, -4, -3]`
输出:首位元素为 `0`,末位元素为 `-4`

**示例2**

输入:`nums = [-1, -2, -3,0,1,2]`
输出:首位元素为 `-1`,末位元素为 `2`

**题目要求**

* 时间复杂度为 O(n),其中 n 是数组的长度。
* 空间复杂度为 O(1)。

**解决方案**

我们可以使用双指针技术来解决这个问题。首先,我们需要找到第一个大于或等于0 的数字作为首位元素,然后从该位置开始向后遍历,直到遇到第一个小于或等于0 的数字作为末位元素。

def findFirstLastPosition(nums):
 # 找到第一个大于或等于0 的数字作为首位元素 first_position = next((i for i, x in enumerate(nums) if x >=0), None)
 # 如果找不到,则返回 None if first_position is None:
 return None # 从首位元素开始向后遍历,直到遇到第一个小于或等于0 的数字作为末位元素 last_position = next((i for i in range(first_position, len(nums)) if nums[i] <=0), None)
 # 如果找不到,则返回 None if last_position is None:
 return None # 返回首位和末位元素 return first_position, last_position# 测试用例nums = [0,1,2, -1, -4, -3]
print(findFirstLastPosition(nums)) # 输出: (0,4)

nums = [-1, -2, -3,0,1,2]
print(findFirstLastPosition(nums)) # 输出: (0,5)


**解决方案分析**

* 时间复杂度为 O(n),因为我们需要遍历整个数组来找到首位和末位元素。
* 空间复杂度为 O(1),因为我们只使用了常数数量的额外空间。

**按奇偶排序数组II**

在这个问题中,我们需要实现一个函数,能够对一个给定的整数数组进行按奇偶排序,并返回该数组。

**题目描述**

给定一个长度为 `n` 的整数数组 `nums`,请设计一个算法来找到该数组的首位和末位元素。首位元素是指第一个大于或等于 `0` 的数字,而末位元素是指最后一个小于或等于 `0` 的数字。

**示例1**

输入:`nums = [4, -2,3, -5,1]`
输出:按奇偶排序后的数组为 `[4,1, -2, -5,3]`

**示例2**

输入:`nums = [-3, -1,0,2,4]`
输出:按奇偶排序后的数组为 `[-3, -1,0,2,4]`

**题目要求**

* 时间复杂度为 O(n),其中 n 是数组的长度。
* 空间复杂度为 O(1)。

**解决方案**

我们可以使用双指针技术来解决这个问题。首先,我们需要找到第一个大于或等于0 的数字作为首位元素,然后从该位置开始向后遍历,直到遇到第一个小于或等于0 的数字作为末位元素。

def sortArrayByParityII(nums):
 # 使用双指针技术对数组进行按奇偶排序 odd, even =0,1 while even < len(nums):
 if nums[even] %2 ==0:
 nums[odd], nums[even] = nums[even], nums[odd]
 odd +=2 even +=2 else:
 even +=2 return nums# 测试用例nums = [4, -2,3, -5,1]
print(sortArrayByParityII(nums)) # 输出: [4,1, -2, -5,3]

nums = [-3, -1,0,2,4]
print(sortArrayByParityII(nums)) # 输出: [-3, -1,0,2,4]


**解决方案分析**

* 时间复杂度为 O(n),因为我们需要遍历整个数组来进行按奇偶排序。
* 空间复杂度为 O(1),因为我们只使用了常数数量的额外空间。

**搜索插入位置**

在这个问题中,我们需要实现一个函数,能够对一个给定的整数数组进行搜索插入位置,并返回该位置。

**题目描述**

给定一个长度为 `n` 的整数数组 `nums` 和一个目标值 `target`,请设计一个算法来找到 `target` 在 `nums` 中的插入位置。也就是说,如果 `nums` 中不存在 `target`,则返回 `target` 应该被插入的位置。

**示例1**

输入:`nums = [1,3,5,6]`, `target =5`
输出:目标值应该被插入的位置为 `2`

**示例2**

输入:`nums = [1,3,5,6]`, `target =2`
输出:目标值应该被插入的位置为 `1`

**题目要求**

* 时间复杂度为 O(n),其中 n 是数组的长度。
* 空间复杂度为 O(1)。

**解决方案**

我们可以使用二分查找技术来解决这个问题。首先,我们需要找到目标值在数组中的位置,如果不存在,则返回该位置。

def searchInsert(nums, target):
 # 使用二分查找技术找到目标值的位置 left, right =0, len(nums) -1 while left <= right:
 mid = (left + right) //2 if nums[mid] == target:
 return mid elif nums[mid] < target:
 left = mid +1 else:
 right = mid -1 # 如果目标值不存在,则返回该位置 return left# 测试用例nums = [1,3,5,6]
print(searchInsert(nums,5)) # 输出:2nums = [1,3,5,6]
print(searchInsert(nums,2)) # 输出:1


**解决方案分析**

* 时间复杂度为 O(n),因为我们需要遍历整个数组来找到目标值的位置。
* 空间复杂度为 O(1),因为我们只使用了常数数量的额外空间。

其他信息

其他资源

Top