0

0

如何使用索引数组对数值数组进行动态插入排序

霞舞

霞舞

发布时间:2026-02-03 13:55:02

|

318人浏览过

|

来源于php中文网

原创

如何使用索引数组对数值数组进行动态插入排序

本文详解 leetcode 1389 题「创建目标数组」的正确解法:根据索引数组 `index` 中指定的位置,将 `nums` 中的元素逐个插入到动态增长的目标数组中,关键在于使用 `arraylist.add(int index, e element)` 实现 o(1) 平均复杂度的中间插入。

原题要求:给定整数数组 nums 和索引数组 index,需按顺序将 nums[i] 插入到目标数组的 index[i] 位置(即插入后该元素位于第 index[i] 个索引处,0 起始)。注意——这不是简单赋值,而是动态插入:后续插入会自动将已有元素向右推移。

你最初的实现存在两个根本性错误:

  • 使用固定长度数组 int[] target = new int[nums.length],无法支持中间插入(只能覆盖,不能平移);
  • 内层循环 for (int j = 0; j

✅ 正确思路是借助动态扩容的 List(如 ArrayList),其 add(int index, E element) 方法天然支持在任意有效索引处插入,自动处理元素位移。插入完成后,再通过 Stream 转为原始 int[] 数组。

以下是完整可运行的解决方案:

速创猫AI简历
速创猫AI简历

一键生成高质量简历

下载
import java.util.*;

public class LeetCode1389 {
    public static void main(String[] args) {
        System.out.println(Arrays.toString(createTargetArray(new int[]{0,1,2,3,4}, new int[]{0,1,2,2,1})));
        // 输出: [0, 4, 1, 3, 2]
        // 解释:
        // i=0: nums[0]=0, index[0]=0 → [] → [0]
        // i=1: nums[1]=1, index[1]=1 → [0] → [0,1]
        // i=2: nums[2]=2, index[2]=2 → [0,1] → [0,1,2]
        // i=3: nums[3]=3, index[3]=2 → [0,1,2] → [0,1,3,2]
        // i=4: nums[4]=4, index[4]=1 → [0,1,3,2] → [0,4,1,3,2]
    }

    static int[] createTargetArray(int[] nums, int[] index) {
        List target = new ArrayList<>(nums.length);
        for (int i = 0; i < nums.length; i++) {
            target.add(index[i], nums[i]); // 在 index[i] 处插入 nums[i]
        }
        return target.stream().mapToInt(Integer::intValue).toArray();
    }
}

? 关键点说明

  • ArrayList.add(index, element) 时间复杂度平均为 O(n),但这是本题最优解——因为题目明确要求“插入到指定位置”,而数组无法高效支持此操作;
  • 初始化 new ArrayList(nums.length) 是良好实践,可避免多次扩容,提升性能;
  • mapToInt(Integer::intValue) 比 i -> i 更语义清晰,显式表明装箱/拆箱意图;
  • 无需手动校验 index[i] 是否越界——题目已保证所有插入操作合法(0 ≤ index[i] ≤ target.size())。

⚠️ 注意事项

  • 切勿尝试用 int[] 手动模拟插入(需频繁 System.arraycopy),代码冗长且易错;
  • 若追求极致性能(如海量数据),可考虑预分配 int[] + 双指针移动,但本题场景下 ArrayList 方案简洁、健壮、符合工程实践。

总结:面对“按序插入至指定位置”类问题,优先选择支持动态索引插入的集合类型(如 ArrayList),而非硬套静态数组,这是理解抽象数据结构优势的关键一步。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

543

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

547

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

153

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

201

2025.08.29

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

539

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

21

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

32

2026.01.06

length函数用法
length函数用法

length函数用于返回指定字符串的字符数或字节数。可以用于计算字符串的长度,以便在查询和处理字符串数据时进行操作和判断。 需要注意的是length函数计算的是字符串的字符数,而不是字节数。对于多字节字符集,一个字符可能由多个字节组成。因此,length函数在计算字符串长度时会将多字节字符作为一个字符来计算。更多关于length函数的用法,大家可以阅读本专题下面的文章。

929

2023.09.19

全国统一发票查询平台入口合集
全国统一发票查询平台入口合集

本专题整合了全国统一发票查询入口地址合集,阅读专题下面的文章了解更多详细入口。

4

2026.02.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.2万人学习

C# 教程
C# 教程

共94课时 | 8.4万人学习

Java 教程
Java 教程

共578课时 | 56.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号