comments | difficulty | edit_url | rating | source | tags | ||
---|---|---|---|---|---|---|---|
true |
简单 |
1203 |
第 387 场周赛 Q1 |
|
给你一个下标从 1 开始、包含 不同 整数的数组 nums
,数组长度为 n
。
你需要通过 n
次操作,将 nums
中的所有元素分配到两个数组 arr1
和 arr2
中。在第一次操作中,将 nums[1]
追加到 arr1
。在第二次操作中,将 nums[2]
追加到 arr2
。之后,在第 i
次操作中:
- 如果
arr1
的最后一个元素 大于arr2
的最后一个元素,就将nums[i]
追加到arr1
。否则,将nums[i]
追加到arr2
。
通过连接数组 arr1
和 arr2
形成数组 result
。例如,如果 arr1 == [1,2,3]
且 arr2 == [4,5,6]
,那么 result = [1,2,3,4,5,6]
。
返回数组 result
。
示例 1:
输入:nums = [2,1,3] 输出:[2,3,1] 解释:在前两次操作后,arr1 = [2] ,arr2 = [1] 。 在第 3 次操作中,由于 arr1 的最后一个元素大于 arr2 的最后一个元素(2 > 1),将 nums[3] 追加到 arr1 。 3 次操作后,arr1 = [2,3] ,arr2 = [1] 。 因此,连接形成的数组 result 是 [2,3,1] 。
示例 2:
输入:nums = [5,4,3,8] 输出:[5,3,4,8] 解释:在前两次操作后,arr1 = [5] ,arr2 = [4] 。 在第 3 次操作中,由于 arr1 的最后一个元素大于 arr2 的最后一个元素(5 > 4),将 nums[3] 追加到 arr1 ,因此 arr1 变为 [5,3] 。 在第 4 次操作中,由于 arr2 的最后一个元素大于 arr1 的最后一个元素(4 > 3),将 nums[4] 追加到 arr2 ,因此 arr2 变为 [4,8] 。 4 次操作后,arr1 = [5,3] ,arr2 = [4,8] 。 因此,连接形成的数组 result 是 [5,3,4,8] 。
提示:
3 <= n <= 50
1 <= nums[i] <= 100
nums
中的所有元素都互不相同。
我们创建两个数组 arr1
和 arr2
,分别存放 nums
中的元素,初始时 arr1
中只有 nums[0]
,arr2
中只有 nums[1]
。
然后遍历 nums
下标从 arr1
的最后一个元素大于 arr2
的最后一个元素,就将当前元素追加到 arr1
,否则追加到 arr2
。
最后将 arr2
中的元素追加到 arr1
中,返回 arr1
。
时间复杂度 nums
的长度。
class Solution:
def resultArray(self, nums: List[int]) -> List[int]:
arr1 = [nums[0]]
arr2 = [nums[1]]
for x in nums[2:]:
if arr1[-1] > arr2[-1]:
arr1.append(x)
else:
arr2.append(x)
return arr1 + arr2
class Solution {
public int[] resultArray(int[] nums) {
int n = nums.length;
int[] arr1 = new int[n];
int[] arr2 = new int[n];
arr1[0] = nums[0];
arr2[0] = nums[1];
int i = 0, j = 0;
for (int k = 2; k < n; ++k) {
if (arr1[i] > arr2[j]) {
arr1[++i] = nums[k];
} else {
arr2[++j] = nums[k];
}
}
for (int k = 0; k <= j; ++k) {
arr1[++i] = arr2[k];
}
return arr1;
}
}
class Solution {
public:
vector<int> resultArray(vector<int>& nums) {
int n = nums.size();
vector<int> arr1 = {nums[0]};
vector<int> arr2 = {nums[1]};
for (int k = 2; k < n; ++k) {
if (arr1.back() > arr2.back()) {
arr1.push_back(nums[k]);
} else {
arr2.push_back(nums[k]);
}
}
arr1.insert(arr1.end(), arr2.begin(), arr2.end());
return arr1;
}
};
func resultArray(nums []int) []int {
arr1 := []int{nums[0]}
arr2 := []int{nums[1]}
for _, x := range nums[2:] {
if arr1[len(arr1)-1] > arr2[len(arr2)-1] {
arr1 = append(arr1, x)
} else {
arr2 = append(arr2, x)
}
}
return append(arr1, arr2...)
}
function resultArray(nums: number[]): number[] {
const arr1: number[] = [nums[0]];
const arr2: number[] = [nums[1]];
for (const x of nums.slice(2)) {
if (arr1.at(-1)! > arr2.at(-1)!) {
arr1.push(x);
} else {
arr2.push(x);
}
}
return arr1.concat(arr2);
}