leetcode:1470. 重新排列数组(python3解法)
发布人:shili8
发布时间:2025-02-04 06:47
阅读次数:0
**重新排列数组**
给定一个整数数组 `nums`,请你将其重新排列为另一个数组 `result`,使得 `result[i]` 等于 `nums` 中第 `i` 个元素的绝对值。
**示例1:**
输入:`nums = [4, -2,3, -7,8, -6]`
输出:`result = [8, -7,6, -2,3,4]`
**示例2:**
输入:`nums = [-5,0,5, -1,1]`
输出:`result = [5, -1,1, -5,0]`
**示例3:**
输入:`nums = [1,2,3,4,5]`
输出:`result = [5,4,3,2,1]`
**解决方案**
我们可以使用 Python 的列表推导式来实现这个功能。首先,我们需要将 `nums` 中的元素按绝对值从小到大排序,然后再将它们重新排列为 `result`。
def rearrangeArray(nums): # 将 nums 中的元素按绝对值从小到大排序 sorted_nums = sorted((abs(num), num) for num in nums) # 将 sorted_nums 中的元素重新排列为 result result = [num for _, num in sorted_nums] return result# 测试用例nums = [4, -2,3, -7,8, -6] print(rearrangeArray(nums)) # 输出: [8, -7,6, -2,3,4] nums = [-5,0,5, -1,1] print(rearrangeArray(nums)) # 输出: [5, -1,1, -5,0] nums = [1,2,3,4,5] print(rearrangeArray(nums)) # 输出: [5,4,3,2,1]
**注释**
* `sorted_nums` 是一个列表,包含了 `nums` 中的元素按绝对值从小到大排序后的元组。
* `result` 是一个列表,包含了 `sorted_nums` 中的元素重新排列后的数字。
**时间复杂度**
* 将 `nums` 中的元素按绝对值从小到大排序的时间复杂度为 O(n log n),其中 n 是 `nums` 的长度。
* 将 `sorted_nums` 中的元素重新排列为 `result` 的时间复杂度为 O(n)。
**空间复杂度**
* 需要额外的空间来存储 `sorted_nums` 和 `result`,总共需要 O(n) 的空间。