LeetCode 题解工作台

将元素分配到两个数组中 I

给你一个下标从 1 开始、包含 不同 整数的数组 nums ,数组长度为 n 。 你需要通过 n 次操作,将 nums 中的所有元素分配到两个数组 arr1 和 arr2 中。在第一次操作中,将 nums[1] 追加到 arr1 。在第二次操作中,将 nums[2] 追加到 arr2 。之后,在第 …

category

2

题型

code_blocks

7

代码语言

hub

3

相关题

当前训练重点

简单 · 数组·模拟

bolt

答案摘要

我们创建两个数组 和 ,分别存放数组 中的元素,初始时 中只有 , 中只有 。 然后遍历 下标从 开始的元素,如果 的最后一个元素大于 的最后一个元素,就将当前元素追加到 ,否则追加到 。

Interview AiBox logo

Interview AiBox 实时 AI 助手,陪你讲清 数组·模拟 题型思路

试试 AiBox 面试助手arrow_forward
description

题目描述

给你一个下标从 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中的所有元素都互不相同。
lightbulb

解题思路

方法一:模拟

我们创建两个数组 arr1\textit{arr1}arr2\textit{arr2},分别存放数组 nums\textit{nums} 中的元素,初始时 arr1\textit{arr1} 中只有 nums[0]\textit{nums[0]}arr2\textit{arr2} 中只有 nums[1]\textit{nums[1]}

然后遍历 nums\textit{nums} 下标从 22 开始的元素,如果 arr1\textit{arr1} 的最后一个元素大于 arr2\textit{arr2} 的最后一个元素,就将当前元素追加到 arr1\textit{arr1},否则追加到 arr2\textit{arr2}

最后将 arr2\textit{arr2} 中的元素追加到 arr1\textit{arr1} 中,返回 arr1\textit{arr1}

时间复杂度 O(n)O(n),空间复杂度 O(n)O(n)。其中 nn 为数组 nums\textit{nums} 的长度。

1
2
3
4
5
6
7
8
9
10
11
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
speed

复杂度分析

指标
时间complexity is O(n) because each element is processed once, and space complexity is O(n) to store the two subarrays before concatenation.
空间Depends on the final approach
psychology

面试官常问的追问

外企场景
  • question_mark

    Ask why comparing only the last elements of arr1 and arr2 is sufficient.

  • question_mark

    Check if the candidate correctly simulates sequential placement rather than sorting.

  • question_mark

    Probe for understanding of array concatenation versus in-place merging.

warning

常见陷阱

外企场景
  • error

    Forgetting that arrays are 1-indexed and misplacing initial elements.

  • error

    Incorrectly comparing the current element with both subarrays instead of only the last elements.

  • error

    Concatenating arr2 before arr1, which reverses the required order.

swap_horiz

进阶变体

外企场景
  • arrow_right_alt

    Distribute elements using maximum element comparison instead of last-element simulation.

  • arrow_right_alt

    Extend the problem to allow repeated elements and handle equal comparisons.

  • arrow_right_alt

    Simulate distribution for k subarrays instead of only two, keeping track of last elements.

help

常见问题

外企场景

将元素分配到两个数组中 I题解:数组·模拟 | LeetCode #3069 简单