3069.将元素分配到两个数组中 I:模拟

【LetMeFly】3069.将元素分配到两个数组中 I:模拟

力扣题目链接:https://leetcode.cn/problems/distribute-elements-into-two-arrays-i/

给你一个下标从 1 开始、包含 不同 整数的数组 nums ,数组长度为 n

你需要通过 n 次操作,将 nums 中的所有元素分配到两个数组 arr1arr2 中。在第一次操作中,将 nums[1] 追加到 arr1 。在第二次操作中,将 nums[2] 追加到 arr2 。之后,在第 i 次操作中:

  • 如果 arr1 的最后一个元素 大于 arr2 的最后一个元素,就将 nums[i] 追加到 arr1 。否则,将 nums[i] 追加到 arr2

通过连接数组 arr1arr2 形成数组 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中的所有元素都互不相同。

解题方法:模拟

创建两个数组,初始值分别是$nums$中的前两个元素。

之后从$nums$第三个元素开始向后遍历,添加到两个数组中最后一个元素较大的那个(数据保证不会等大)。

最后拼接两个数组并返回。

  • 时间复杂度$O(len(nums))$
  • 空间复杂度$O(len(nums))$

AC代码

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/*
* @LastEditTime: 2026-08-20 10:14:33
*/
class Solution {
public:
vector<int> resultArray(vector<int>& nums) {
vector<int> v1(1, nums[0]), v2(1, nums[1]);
for (int i = 2, n = nums.size(); i < n; i++) {
(v1.back() > v2.back() ? v1 : v2).push_back(nums[i]);
}
v1.insert(v1.end(), v2.begin(), v2.end());
return v1;
}
};

Python

1
2
3
4
5
6
7
8
9
10
11
'''
LastEditTime: 2026-08-20 10:28:27
'''
from typing import List

class Solution:
def resultArray(self, nums: List[int]) -> List[int]:
v1, v2 = [nums[0]], [nums[1]]
for i in range(2, len(nums)):
(v1 if v1[-1] > v2[-1] else v2).append(nums[i])
return v1 + v2

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*
* @LastEditTime: 2026-08-20 10:22:02
*/
import java.util.List;
import java.util.ArrayList;

class Solution {
public int[] resultArray(int[] nums) {
List<Integer> v1 = new ArrayList<>();
List<Integer> v2 = new ArrayList<>();
v1.add(nums[0]);
v2.add(nums[1]);

for (int i = 2, n = nums.length; i < n; i++) {
(v1.getLast() > v2.getLast() ? v1 : v2).add(nums[i]);
}
v1.addAll(v2);
return v1.stream().mapToInt(i -> i).toArray();
}
}

Go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*
* @LastEditTime: 2026-08-20 10:27:19
*/
package main

func resultArray(nums []int) []int {
v1 := []int{nums[0]}
v2 := []int{nums[1]}
for i, n := 2, len(nums); i < n; i++ {
if v1[len(v1)-1] > v2[len(v2)-1] {
v1 = append(v1, nums[i])
} else {
v2 = append(v2, nums[i])
}
}
v1 = append(v1, v2...)
return v1
}

Rust

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*
* @LastEditTime: 2026-08-20 10:29:49
*/
impl Solution {
pub fn result_array(nums: Vec<i32>) -> Vec<i32> {
let mut v1 = vec![nums[0]];
let mut v2 = vec![nums[1]];
for &num in &nums[2..] {
if v1[v1.len() - 1] > v2[v2.len() - 1] {
v1.push(num);
} else {
v2.push(num);
}
}
v1.extend(v2);
v1
}
}

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源


3069.将元素分配到两个数组中 I:模拟
https://blog.letmefly.xyz/2026/08/20/LeetCode 3069.将元素分配到两个数组中I/
作者
发布于
2026年8月20日
许可协议