博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lintcode-189-丢失的第一个正整数
阅读量:4672 次
发布时间:2019-06-09

本文共 1004 字,大约阅读时间需要 3 分钟。

给出一个无序的正数数组,找出其中没有出现的最小正整数。

样例

如果给出 [1,2,0], return 3

如果给出 [3,4,-1,1], return 2

挑战

只允许时间复杂度O(n)的算法,并且只能使用常数级别的空间。

标签

数组

思路

利用原有数组的空间,将素组元素位置重置,即 A[i+1] 应放在第 i 位(1 <= i <= n),如 1 放在 A[0], 2 放在 A[1],如此一来,再次遍历数组,若 A[i] != i + 1,即找到没有出现的最小正整数

code

class Solution {public:    /**         * @param A: a vector of integers     * @return: an integer     */    int firstMissingPositive(vector
A) { // write your code here int size = A.size(); if (size <= 0) { return 1; } for (int i = 0; i < size; ) { if (A[i] == i + 1) { i++; } if (A[i] >= 1 && A[i] <= size && A[i] != A[A[i] - 1]) { swap(A[i], A[A[i] - 1]); } else { i++; } } for (int i = 0; i < size; i++) { if (A[i] != i + 1) { return i + 1; } } return size + 1; }};

转载于:https://www.cnblogs.com/libaoquan/p/7294070.html

你可能感兴趣的文章
简单scrapy爬虫实例
查看>>
dosbox
查看>>
06day1
查看>>
COM 学习(五)——编译、注册、调用
查看>>
设计模式——责任连模式
查看>>
POJ 1716 Integer Intervals 差分约束
查看>>
在Android中通过导入静态数据库来提高应用第一次的启动速度
查看>>
对于SQL注入的理解
查看>>
Jenkins:项目配置
查看>>
查看windows所有exe的启动参数。
查看>>
发布几个PDF小工具
查看>>
git修改user.name 和user.email
查看>>
C# winFrom窗体设计问题-部分文件打不开窗体设计器 变成类.cs
查看>>
POJ 2136
查看>>
smarty模板基础2 缓存文件
查看>>
orical数据库常用语句
查看>>
Java连接SQLite数据库
查看>>
ASP.NET之JSONHelper操作
查看>>
Flask中那些特殊的装饰器
查看>>
JPA学习笔记二——Hello World
查看>>