3069. 将元素分配到两个数组中 I
题目描述:
给你一个下标从 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] <= 1000
- nums中的所有元素都互不相同。
解题分析及思路:
方法:模拟
思路:
直接模拟题目描述的过程即可,使用两个数组 a 和 b 分别存放 arr1 和 arr2 的元素,然后遍历 nums 数组,根据题目描述的规则将元素分配到 a 和 b 中,最后将 a 和 b 连接起来即可。
func resultArray(nums []int) []int {
a := []int{nums[0]}
b := []int{nums[1]}
for i := 2; i < len(nums); i++ {
if a[len(a)-1] > b[len(b)-1] {
a = append(a, nums[i])
} else {
b = append(b, nums[i])
}
}
return append(a, b...)
}
复杂度:
- 时间复杂度:O(N),其中 N 是 nums 的长度
- 空间复杂度:O(1)
执行结果:
- 执行耗时:0 ms,击败了100.00% 的Go用户
- 内存消耗:3 MB,击败了88.33% 的Go用户