跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava算法

LeetCode 数组经典题型解析与实现

数组操作是算法面试高频考点。涵盖寻找中心点、最大元素判断、数字加一、旋转数组及帕斯卡三角。通过 Java 实现,运用前缀和、双变量追踪、进位处理、辅助数组及动态规划等技巧,重点讲解边界条件与空间复杂度优化,展示数组操作核心逻辑。

协议工匠发布于 2019/10/16更新于 2026/6/715 浏览
LeetCode 数组经典题型解析与实现

数组是算法面试中最基础也最常见的数据结构之一。今天我们来梳理几道经典的 LeetCode 数组题目,看看如何用高效的逻辑解决它们。

查找中心点(#1144)

对于一个整数数组,该数组的中心点(pivot)指的是该元素左边的数字之和等于右边的数字之和。比如数组 [1, 7, 3, 6, 5, 6] 的中心点坐标是 3。

核心思路是先计算出数组的总和 sum,然后依次遍历并累加左边集合 leftSum。如果当前索引 i 满足 leftSum == sum - nums[i] - leftSum,说明 i 就是中心点序号。

public int pivotIndex(int[] nums) {
    int sum = 0;
    for (int num : nums) {
        sum += num;
    }
    int leftSum = 0;
    for (int i = 0; i < nums.length; i++) {
        if (leftSum == sum - nums[i] - leftSum) {
            return i;
        }
        leftSum += nums[i];
    }
    return -1;
}

至少是其他元素两倍的最大值(#1147)

在一个整数数组中,如果最大值至少是其他元素的两倍,就返回该最大值的序号,否则返回 -1。

遍历时只需记录最大值及其序号,以及第二大值。拿到这两个关键数据后,比较一下即可得出结论。

public int dominantIndex(int[] nums) {
    int largest = Integer.MIN_VALUE;
    int secondToLargest = Integer.MIN_VALUE;
    int index  ;
     (   ; i < nums.length; i++) {
         (nums[i] > largest) {
            secondToLargest = largest;
            largest = nums[i];
            index = i;
        }   (nums[i] > secondToLargest) {
            secondToLargest = nums[i];
        }
    }
     (largest >=  * secondToLargest) {
         index;
    }  {
         -;
    }
}
=
0
for
int
i
=
0
if
else
if
if
2
return
else
return
1

加 1(#1148)

给定一个表示数字值的数组,对其进行加 1 操作。例如数组 [1, 2, 3] 代表数字 123,加 1 后结果为 [1, 2, 4]。

解法很直观,关键在于处理好进位。难点在于类似 [9, 9, 9] 的情况,此时需要改变数组长度。

public int[] plusOne(int[] digits) {
    for (int i = digits.length - 1; i >= 0; i--) {
        if (++digits[i] <= 9) {
            return digits;
        } else {
            digits[i] = 0;
        }
    }
    int[] result = new int[digits.length + 1];
    result[0] = 1;
    return result;
}

旋转数组(#1182)

给定一个数组,将其元素往右移动 k 个位置。对于数组 [1, 2, 3, 4, 5, 6, 7] 和 k=3,得到的结果是 [5, 6, 7, 1, 2, 3, 4]。

这个问题并不复杂。原来在位置 i 的元素,旋转后会移动到 (i + k) % nums.length 的位置。借助一个辅助数组,可以清晰地实现这一逻辑。

public void rotate(int[] nums, int k) {
    int[] result = new int[nums.length];
    for (int i = 0; i < nums.length; i++) {
        result[(i + k) % nums.length] = nums[i];
    }
    System.arraycopy(result, 0, nums, 0, result.length);
}

Pascal 三角(#1170)

生成 Pascal 三角的前 n 行。

算法逻辑很直接,只需要注意边界情况的处理即可。每一行的首尾都是 1,中间的值等于上一行相邻两数之和。

public List<List<Integer>> generate(int numRows) {
    List<List<Integer>> result = new ArrayList<>(numRows);
    if (numRows == 0) {
        return result;
    }
    result.add(Collections.singletonList(1));
    for (int i = 1; i < numRows; i++) {
        List<Integer> row = new ArrayList<>(i + 1);
        row.add(1);
        List<Integer> lastRow = result.get(i - 1);
        for (int j = 1; j < i; j++) {
            row.add(lastRow.get(j - 1) + lastRow.get(j));
        }
        row.add(1);
        result.add(row);
    }
    return result;
}

目录

  1. 查找中心点(#1144)
  2. 至少是其他元素两倍的最大值(#1147)
  3. 加 1(#1148)
  4. 旋转数组(#1182)
  5. Pascal 三角(#1170)
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 分布式文件系统 HDFS 数据读写过程详解
  • 渗透测试工程师零基础学习指南
  • 前端实现视频画中画功能:主窗口与小窗同步控制
  • 云算力平台集成通义万相 2.1 的 AIGC 创作实战
  • MATLAB 实现基于天牛须搜索算法(BAS)的无人机三维路径规划
  • 栈结构在算法题中的五种经典应用:去重、退格、计算、解码与验证
  • IDEA 迁移至 Trae AI IDE:SpringBoot+Maven+Vue 项目配置
  • RocketMQ 顺序消息详解:全局与分区实现及最佳实践
  • Stable Diffusion 整合包安装与使用指南
  • 使用 ClawdBot 快速搭建 Telegram 翻译机器人
  • 飞算 JavaAI 2.0.0 评测:自然语言编程实战与效率分析
  • Mac M 系列芯片安装 Kali Linux 虚拟机指南
  • 深入 llama.cpp:llama-server 从命令行到 HTTP Server
  • Vivado AXI4-Stream Data FIFO 核配置参数与测试详解
  • 基于 ChatTTS 搭建支持情感控制的 TTS 服务
  • Naiz AI:从语义到像素,全链路重构视频数字孪生
  • 基于 YOLO11 的无人机航拍小目标检测算法研究
  • Kingbase 数据库 KSQL 常用命令指南
  • Z-Image-Turbo 文生图模型技术优势与本地部署指南
  • Windows 系统 Python 详细安装教程与配置指南

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online