leetcode_第17题_缺失的第一个正数——原地哈希

2023-11-06

题目

题目

分析

正常思路:另外制作一个哈希表,然后遍历就ok
但是这样不符合题目空间复杂度要求,所以采用原地哈希就可以了。
思路:把正常数字nums[i]交换存储到下标位置为nums[i]-1的地方,不正常数字不管。(正常数字是指,值∈[1,len])
这样,如果一个数组里都是正确的数字,就会出现i=nums[i]-1,比如:1 2 3 4 5。如果数组里有不正常数字4 5 3 -1,就会出现 -1 5 3 4,即 3 4 位置正确。
最后遍历一遍,找到最小的 i!=nums[i]即可

代码

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        int n=nums.size();
        for(int i=0;i<n;i++){
            while(nums[i]>=1&&nums[i]<=n && nums[i]!=nums[nums[i]-1]){//如果该数属于正常范围内,但未在正确位置
                swap(nums[i],nums[nums[i]-1]);//将nums[i]换到正确的位置nums[i]-1去
            }
        }
        for(int i=0;i<n;i++){
            if(nums[i]!=i+1)
            return i+1;
        }
        return n+1;

    }
};

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

leetcode_第17题_缺失的第一个正数——原地哈希 的相关文章

  • 分治-归并排序

    文章目录 315 计算右侧小于当前元素的个数 1 题目 2 算法原理 3 代码实现 493 翻转对
  • 基于Java的数据结构精品课程教学网站

    收藏关注不迷路 源码文章末 文章目录 前言 一 项目介绍 二 开发环境 三 功能介绍 四 核心代码 五 效果图 六 文章目录 前言 本基于Java的数据结构精品课程教学网站是根据当前教学大环境相关的内容实际情况开发的 在系统语言选择上我们使
  • 算法设计与实现--贪心篇

    贪心算法 贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法 以期望能够通过一系列局部最优的选择达到全局最优 贪心算法的关键是定义好局部最优的选择 并且不回退 即一旦做出了选择 就不能撤销 一般来说 贪心算法适用于满足以下两个条件的
  • 算法设计与实现--动态规划篇

    什么是动态规划算法 动态规划算法是一种求解复杂问题的方法 通过将原问题分解为相对简单的子问题来求解 其基本思想是将待求解的问题分解为若干个子问题 阶段 按顺序求解子阶段 前一子问题的解 为后一子问题的求解提供了有用的信息 在求解任一子问题时
  • C语言,求取数组的序亏:已知一个整数数组,求出个数组中每个元素在整个 数组的排序。

    要求获取整数数组中每个元素的排序 可以使用以下方法 1 定义一个结构体数组 其中每个结构体包含数组元素的值和索引 2 遍历整数数组 将每个元素与其索引一起存储到结构体数组中 3 对结构体数组进行排序 按照元素的值进行升序排序 4 遍历排序后
  • 一致性哈希算法,hash(key)是负值时,会出现异常吗?

    一致性哈希算法 hash key 是负值时 会出现异常吗 一致性哈希算法中 哈希函数hash key 的返回值通常是一个非负整数 如果hash key 返回负值 则可能会出现一些问题 例如无法正确地映射对象到哈希环上的位置 或者无法正确地找
  • 八大排序(插入排序 | 选择排序 | 冒泡排序)

    在我们内存中我们一般会有一些没有顺序的数据 我们成为内排序 而今天分享八大排序的是时间复杂度为O N 2 的插入排序 选择排序和教学意义比较强的冒泡排序 插入排序 这是插入排序的动图 通过动图我们也是可以看到我们的插入排序的思想 从当前的位
  • 【数据结构入门精讲 | 第二篇】一文讲清算法复杂度

    上篇文章中我们引入了算法 数据结构 数据类型等概念 而要想衡量一个算法与数据结构是否为优质的 就需要一个衡量标准 这个衡量标准也是在我们实现一个好的算法时要遵循的原则 目录 基本概念 渐进性态 渐进性态数学表征 算法复杂度的运算 顺序搜索算
  • DS八大排序之冒泡排序和快速排序

    前言 前两期我们已经对 插入排序 直接插入排序和希尔排序 和 选择排序 直接选择排序和堆排序 进行了详细的介绍 这一期我们再来详细介绍一组排序 交换排序 即耳熟能详的冒泡排序和赫赫有名的快速排序 本期内容介绍 冒泡排序 快速排序 Hoare
  • 剑指 Offer(第2版)面试题 35:复杂链表的复制

    剑指 Offer 第2版 面试题 35 复杂链表的复制 剑指 Offer 第2版 面试题 35 复杂链表的复制 解法1 模拟 剑指 Offer 第2版 面试题 35 复杂链表的复制 题目来源 48 复杂链表的复刻 解法1 模拟 算法 复制原
  • LeetCode326. Power of Three

    文章目录 一 题目 二 题解 一 题目 Given an integer n return true if it is a power of three Otherwise return false An integer n is a po
  • 深度学习目标检测全连接层什么意思

    在深度学习目标检测中 通常我们使用卷积神经网络 Convolutional Neural Network CNN 进行特征提取 CNN 的主要结构包括卷积层和池化层 用于从输入图像中提取特征 然而 为了最终输出目标的类别和位置信息 通常在网
  • List去重-使用distinctByKey方法根据对象的属性进行去重

    description 使用distinctByKey方法根据对象的属性进行去重 author zs date 2023 12 18 14 29 param keyExtractor return java util function Pr
  • 数组对象排序 (arr.sort())

    前端面试题库 面试必备 推荐 地址 前端面试题库 对象排序 arr sort 描述 方法sort 将在原数组上对 数组元素 进行排序 即排序时不创建新的数组副本 如果想按照别的顺序进行排序 就必须提供比较函数 该函数要比较两个值 然后返回一
  • LeetCode 1901. 寻找峰值 II

    一 题目 1 题目描述 一个 2D 网格中的 峰值 是指那些 严格大于 其相邻格子 上 下 左 右 的元素 给你一个 从 0 开始编号 的 m x n 矩阵 mat 其中任意两个相邻格子的值都 不相同 找出 任意一个 峰值 mat i j
  • 冒泡排序/选择排序/插入排序/快速排序/归并排序/桶排序/堆排序/希尔排序/计数排序/基数排序/二分查找/广度优先搜索/深度优先搜索

    排序算法 冒泡排序 Bubble Sort 通过重复地比较相邻的元素并交换它们 使得最大 或最小 的元素逐渐移动到列表的一端 从而实现排序 选择排序 Selection Sort 在未排序的部分中 选择最小 或最大 的元素 并将其放置在已排
  • Leetcode 45 跳跃游戏 II

    题意理解 给定一个长度为 n 的 0 索引 整数数组 nums 初始位置为 nums 0 每个元素 nums i 表示从索引 i 向前跳转的最大长度 还是从初始坐标i 0的位置到达最后一个元素 但是问题不是能不能跳到 而是 最少几步能跳到最
  • LeetCode 2397. 被列覆盖的最多行数,状态压缩优化回溯法

    一 题目 1 题目描述 给你一个下标从 0 开始 大小为 m x n 的二进制矩阵 matrix 另给你一个整数 numSelect 表示你必须从 matrix 中选择的 不同 列的数量 如果一行中所有的 1 都被你选中的列所覆盖 则认为这
  • 排序:计数排序

    一 概念 计数排序是非比较排序 是对哈希直接定址法的变形应用 二 思想 利用数组统计相同数据出现的次数 例如整型数据m出现n次 就在数组m位置记录数据为n 最后从头遍历数组打印数据即可 通俗来讲就是 数组下标即为数据 下标所指位置的值即为数
  • 顺序表和链表基础

    定义动态的顺序表 typedef int SLDataType typedef struct Seqlist SLDataType array size t size size t capacity Seqlist 在顺序表中插入数据 bo

随机推荐

  • 什么是布隆过滤器?如何使用?

    欢迎搜索 文章目录 一 布隆过滤器简介 二 布隆过滤器的结构 三 布隆过滤器应用 四 布隆过滤器的优缺点 五 布隆过滤器实战 六 总结 Redis缓存穿透可以通过布隆过滤器进行解决 那么什么是布隆过滤器呢 请往下看 通常你判断某个元素是否存
  • 在Unity中编写Shader的编译器环境配置(支持CG和HLSL)

    Unity默认使用的编译器VisualStudio带有扩展插件ShaderLabVS 但功能很差 所以还是选用VisualStudioCode作为编写Shader的编译器 一方面其能自动识别Shaderlab语法 并且还有丰富的Shader
  • vue脚手架中创建自定义指令

    局部自定义指令直接在组件内部创建
  • 使用tee命令 将bash -x 输出的内容保存到文件中

    tee 命令语法 tee ai help version 文件 参数 a或 append 附加到既有文件的后面 而非覆盖它 i或 ignore interrupts 忽略中断信号 help 在线帮助 version 显示版本信息 示例 ba
  • java -jar 启动脚本

    ccue sh 需 chomd x ccue sh 启动使用 ccue sh start bin sh ccue sh start 启动 stop 停止 restart 重启 status 状态 AppName ccue server ja
  • 【一分钟解决】Python报错ImportError: attempted relative import with no known parent package

    文章目录 报错关键词 常见问题汇总及排查 1 在脚本中使用相对导入 详细解决方案 1 看这段基本够了 使用相对导入的时机 2 扩展 如果你真的需要在包平级目录以外的位置调用包 参考链接 扩展 名词解释 脚本 script 模块 module
  • 【Python 3.7】分子运动:修改 rw_visual.py,将其中的 plt.scatter() 替换为 plt.plot() 。为 模拟花粉在水滴表面的运动路径

    Python 3 7 分子运动 修改 rw visual py 将其中的 plt scatter 替换为 plt plot 为 模拟花粉在水滴表面的运动路径 向 plt plot 传递 rw x values 和 rw y values 并
  • 前端canvas绘制水波球

    效果如下图 代码
  • 创建软链接(symbolic link)

    Linux ln命令是一个非常重要命令 它的功能是为某一个文件在另外一个位置建立一个同步的链接 类似windows下的快捷方式 Linux文件系统中 有所谓的链接 link 我们可以将其视为档案的别名 而链接又可分为两种 硬链接 hard
  • 计算机视觉学习总结:基本的图像操作和处理(一)

    PIL Python图像处理类库 PIL Python Imaging Library Python 图像处理类库 提供了通用的图像处理功能 以及大量有用的基本图像操作 比如图像缩放 裁剪 旋转 颜色转换等 基本操作 1 读取图片及灰度转换
  • acwing模板整理(第一讲)(基础算法)

    目录 一 归并排序模板 二 二分 需要满足单调性 整数二分和小数二分 三 高精度加减乘除 2 减法 3 乘法 4 除法 四 1 一维前缀和与差分数组 2 子矩阵的前缀和与差分矩阵 二维前缀和与二维差分矩阵 五 双指针算法 找单调性优化 双指
  • 测试——Web网站测试主要测试那些内容

    一般的网站的主要测试内容就分为以下几点 目录 功能测试 性能测试 安全测试 稳定测试 兼容性测试 压力测试 功能测试 功能测试常用到的有效方法 等价划分法 等价划分法就是把输入空间划分为几个 等价区间 在每个等价区间中只需要测试一个典型的数
  • 六、代理模式

    六 动态代理模式 1 模式结构和结构图 1 抽象主题 Subject 类 通过接口或抽象类声明真实主题和代理对象实现的业务方法 1 2 真实主题 Real Subject 类 实现了抽象主题中的具体业务 是代理对象所代表的真实对象 是最终要
  • Linux Power Supply架构及代码解析

    一 概述 电源管理整体上可以分为两个部分 一个是电池监控 fuel gauge 另外一个是充放电管理 这两部分在内核中也是分为两个驱动来管理 fuelgauge驱动的功能主要是负责向上层Android系统提供当前电池的电量和健康信息等等 同
  • redis学习总结

    文章目录 redis数据结构原理 简单字符串SDS 叫Simple dynamic string 链表 字典 跳跃表 redis持久化 RDB持久化 AOF持久化 redis集群三种模式 主从模式 实现主从分离 提高吞吐 多机备份 哨兵模式
  • Python填写问卷星

    主要使用python实现问卷星的自动填写和提交 主要使用了https www jianshu com p 34961ceedcb4的代码 使用了X Forwarded For自动修改ip 我测试的时候是可以使用的 PS 我是在linux下面
  • idea 设置自动添加注释

    添加类注释 打开Settings 点击Apply OK 添加方法注释 添加组 选择test 添加Live Template text如下 Author yeluo Description description param param re
  • JSONObject对象的方法

    JSONObject 是 org json 库中的一个类 用于创建和操作 JSON 对象 以下是一些常用的 JSONObject 方法 1 put key value 向 JSON 对象中添加键值对 jsonObject put key v
  • 锂电池充放电电路设计与分析

    Lithium battery charge 锂电池充放电电路 1 USB插入检测电路 1 1 FUSE1 自恢复保险丝 当后续的电路发生短路等故障时 自动启动保护作用来保护外围的电源 避免损坏 因为经常出事故一般是电源出事故了 电源短路
  • leetcode_第17题_缺失的第一个正数——原地哈希

    题目 题目 分析 正常思路 另外制作一个哈希表 然后遍历就ok 但是这样不符合题目空间复杂度要求 所以采用原地哈希就可以了 思路 把正常数字nums i 交换存储到下标位置为nums i 1的地方 不正常数字不管 正常数字是指 值 1 le