LeetCode 解题思路 2(Hot 100)

news/2025/2/26 19:48:44

在这里插入图片描述

解题思路:

  1. 哈希去重: 将所有元素存入哈希集合。
  2. 遍历检查起点: 对每个元素,若其前驱不存在,则作为起点开始向后扩展,统计最长连续序列。

Java代码:

class Solution {
    public int longestConsecutive(int[] nums) {
        Set<Integer> numSet = new HashSet<>();
        for (int num : nums) {
            numSet.add(num);
        }
        
        int maxLength = 0;
        
        for (int num : numSet) {
            if (!numSet.contains(num - 1)) {
                int currentNum = num;
                int currentStreak = 1; 
                while (numSet.contains(currentNum + 1)) {
                    currentNum++;
                    currentStreak++;
                }
                maxLength = Math.max(maxLength, currentStreak);
            }
        }
        
        return maxLength;
    }
}

复杂度分析:

  • 时间复杂度: 严格O(n),每个元素在哈希操作和遍历中均被处理有限次。
  • 空间复杂度: 需要使用一个 HashSet 来存储所有的数字,空间复杂度为 O(n)。

在这里插入图片描述

解题思路:

  1. 初始化两个指针: 用于遍历整个数组和记录下一个非零元素应该放置的位置。
  2. 交换元素: 将遍历到的非零元素放置到左指针所指向的位置,并将右指针向前移动一位。
  3. 数组填充: 将剩下的位置填充为零。

Java代码:

public void moveZeroes(int[] nums) {
    int cur = 0;
    for (int i = 0; i < nums.length; i++) {
        if (nums[i] != 0) {
            nums[cur] = nums[i];
            cur++;
        }
    }
    for (int i = cur; i < nums.length; i++) {
        nums[i] = 0;
    }
}

复杂度分析:

  • 时间复杂度: 从前往后遍历整个数组,时间复杂度为 O(n)。
  • 空间复杂度: 通过索引操作原数组,未使用任何额外的存储空间,因此空间复杂度为常数级别 O(1)。

http://www.niftyadmin.cn/n/5869118.html

相关文章

线代[8]|北大丘维声教授《怎样学习线性代数?》(红色字体为博主本人注释)

文章目录 说明一、线性代数的内容简介二、学习线性代数的用处三、线性代数的特点四、学习线性代数的方法五、更新时间记录 说明 文章中红色字体为博主敲录完丘教授这篇文章后所加&#xff0c;刷到这篇文章的读者在首次阅读应当跳过红色字体&#xff0c;先通读一读文章全文&…

rust笔记10-多线程

在 Rust 中,Sync 和 Send 是用于多线程编程的两个关键 trait,它们帮助确保线程安全和数据同步。 Send 和 Sync Trait Send: 表示类型的所有权可以在线程间安全传递。如果一个类型实现了 Send,它的实例可以从一个线程移动到另一个线程。大多数类型都实现了 Send,但像 Rc<…

SSH.NET: .NET 平台上的安全 Shell 库

简介 SSH.NET 是一个针对 .NET 平台优化的 Secure Shell (SSH-2) 库&#xff0c;支持并行操作。它提供了丰富的功能&#xff0c;包括执行 SSH 命令、SFTP 和 SCP 文件传输、端口转发、交互式终端等功能&#xff0c;并支持多种认证方式和加密方法。 主要特性 命令执行&#x…

【QT】QLinearGradient 线性渐变类简单使用教程

目录 0.简介 1&#xff09;qtDesigner中 2&#xff09;实际执行 1.功能详述 3.举一反三的样式 0.简介 QLinearGradient 是 Qt 框架中的一个类&#xff0c;用于定义线性渐变效果&#xff08;通过样式表设置&#xff09;。它可以用来填充形状、背景或其他图形元素&#xff0…

危化品经营单位安全管理人员的职责及注意事项

危化品经营单位安全管理人员肩负着保障经营活动安全的重要责任&#xff0c;以下是其主要职责及注意事项&#xff1a; 职责 1. 安全制度建设与执行&#xff1a;负责组织制定本单位安全生产规章制度、操作规程和生产安全事故应急救援预案&#xff0c;确保这些制度符合国家相关法…

【原创工具】同文件夹PDF文件合并 By怜渠客

【原创工具】同文件夹PDF文件合并 By怜渠客 原贴&#xff1a;可批量合并多个文件夹内的pdf工具 - 吾爱破解 - 52pojie.cn 他这个存在一些问题&#xff0c;并非是软件内自主实现的PDF合并&#xff0c;而是调用的pdftk这一工具&#xff0c;但楼主并没有提供pdftk&#xff0c;而…

SQL之order by盲注

目录 一.order by盲注的原理 二.注入方式 a.布尔盲注 b.时间盲注 三.防御 一.order by盲注的原理 order by子句是用于按指定列排序查询结果&#xff0c;列名或列序号皆可。 order by 后面接的字段或者数字不一样&#xff0c;那么这个数据表的排序就会不同。 order by 盲…

一周掌握Flutter开发--3、布局与 UI 组件

文章目录 布局与 UI 组件核心组件3.1 基础布局3.2 滚动布局3.3 容器类 必须掌握3.4 响应式设计3.5 自适应布局 总结 布局与 UI 组件 Flutter 的布局系统非常灵活&#xff0c;通过组合不同的 Widget 来构建复杂的 UI。掌握核心布局组件和设计原则是开发高效、美观应用的关键。 …