LeetCode OJ 41. First Missing Positive
Given an unsorted integer array, find the first missing positive integer.
For example,
Given [1,2,0] return 3,
and [3,4,-1,1] return 2.
Your algorithm should run in O(n) time and uses constant space.
【题目分析】
给定一个整数数组,找出数组中第一个缺失的正整数。比如[1,2,0]缺少3,[3,4,-1,1]缺少2。
【思路】
1. 复杂度为O(n2)
在数组中分别查找1,2,3,···,nums.length,返回查找到的第一个不在数组中的值。最坏情况下需要nums.length次遍历数组,平均时间复杂度为O(n2)。
2. 复杂度为O(n)
如何更加简单得处理这个问题呢?在使用固定空间的约束下,我们当然是要在原来的数组上做文章。想法如下:
(1)遍历数组,如果当前元素nums[i]等于i+1,则表示第i+1个正数没有缺失,继续向后遍历;
(2)如果当前元素小于等于零或者大于nums.length,则继续向后遍历;
(3)如果当前元素大于零而且小于等于nums.length,则把nums[nums[i]-1]与nums[i]交换。
这样处理的结果就是我们把每一个正数n都放在了n-1的位置上,然后再从头遍历数组,如果某个位置k不满足nums[k] == k+1,则返回缺失的正数k+1,如果遍历到数组末尾,则返回nums.length+1;
【java代码】
public class Solution {
public int firstMissingPositive(int[] nums) {
if(nums == null || nums.length == 0) return 1;
int i = 0;
while(i < nums.length){
if(nums[i] == i+1) i++;
else if(nums[i] > 0 && nums[i] <= nums.length){
int temp = nums[nums[i] - 1];
if(temp != nums[i]){
nums[nums[i] - 1] = nums[i];
nums[i] = temp;
}
else i++;
}
else i++;
}
for(i = 0; i < nums.length; i++)
if(nums[i] != i+1) return i+1;
return nums.length+1;
}
}
LeetCode OJ 41. First Missing Positive的更多相关文章
- [Leetcode][Python]41: First Missing Positive
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 41: First Missing Positivehttps://oj.le ...
- LeetCode题解41.First Missing Positive
41. First Missing Positive Given an unsorted integer array, find the first missing positive integer. ...
- 【一天一道LeetCode】#41. First Missing Positive
一天一道LeetCode系列 (一)题目 Given an unsorted integer array, find the first missing positive integer. For e ...
- LeetCode OJ:First Missing Positive (第一个丢失的正数)
在leetCode上做的第一个难度是hard的题,题目如下: Given an unsorted integer array, find the first missing positive inte ...
- leetcode problem 41 -- First Missing Positive
Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0] ...
- 【LeetCode】41. First Missing Positive (3 solutions)
First Missing Positive Given an unsorted integer array, find the first missing positive integer. For ...
- 【leetcode】41. First Missing Positive
题目如下: 解题思路:这题看起来和[leetcode]448. Find All Numbers Disappeared in an Array很相似,但是有几点不同:一是本题的输入存在负数,二是没有 ...
- [array] leetcode - 41. First Missing Positive - Hard
leetcode - 41. First Missing Positive - Hard descrition Given an unsorted integer array, find the fi ...
- LeetCode - 41. First Missing Positive
41. First Missing Positive Problem's Link ---------------------------------------------------------- ...
随机推荐
- wuzhicms 数据迁移策略
1,本地的域名或ip为特殊域名或ip,勿用 127.0.0.1 或 localhost 或192.168.1.101 等 2,导出数据库,替换所有域名为新域名 3,替换所有文件域名为新域名 4, ...
- js在关闭页面前弹出确认提示【转载】
最近项目中出现个bug,就是导出数据后,会提示确认导航,其实实际需求并不需要这个提示,可能是之前遗留的问题.查了下资料是在触发了onbeforeunload事件,那么剩下的就是代码组织问题了. 众所周 ...
- Firefox一次提交两次请求的问题
把这迅雷的插件禁用后一切恢复正常.
- Python之软件管理
常用软件包管理工具 一般python软件包管理工具,主要有以下: 图 常用python包管理工具 可以看到distribute是setuptools的替代方案(因为Setuptools包不再维护了), ...
- 使用eclipse XML catalog绑定dtd文件
有时候我们想编辑struts或spring的xml配置文件的时候,输了“<”之后eclipse却没有提示关键字,这是因为eclipse需要到网络下载dtd文件而由于网络原因没下载下来所以无法提示 ...
- ios开发判断手机是否安装微信app
1.代码如下 if ([WXApi isWXAppInstalled]) 2.如果以上代码无效,请在plist文件中添加如下内容
- GD库 图片缩略图 图片水印
/** * GD库 图片缩略图 *//*$image = imagecreatefromjpeg("1.jpg");var_dump($image);exit;$width = i ...
- windows10安装composer并解决和xdebug的冲突
环境:windows10,php7,php安装目录C:\php\,php目录已加入windows的PATH. 1.下载composer,在Windows下最简单的办法是下载composer.phar并 ...
- dao代码模板
提供数据源以及回收资源的工具类DbUtils: public class DbUtils { private static ComboPooledDataSource dataSource = new ...
- hive-1.2.1安装步骤
一.Hive安装和配置 1.先决条件 已经安装好hadoop-2.4.1,hbase-1.0.0. 2.下载Hive安装包 当前Hive可到apache官网下载,选择的是hive-1.2.1.运行: ...