zoukankan      html  css  js  c++  java
  • Leetcode 41.缺失的第一个正数

    缺失的第一个正数

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

    示例 1:

    输入: [1,2,0]

    输出: 3

    示例 2:

    输入: [3,4,-1,1]

    输出: 2

    示例 3:

    输入: [7,8,9,11,12]

    输出: 1

    说明:

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

    虽然不能再另外开辟非常数级的额外空间,但是可以在输入数组上就地进行swap操作。

    思路:交换数组元素,使得数组中第i位存放数值(i+1)。最后遍历数组,寻找第一个不符合此要求的元素,返回其下标。整个过程需要遍历两次数组,复杂度为O(n)

    下图以题目中给出的第二个例子为例,讲解操作过程。

     1 class Solution {
     2     public int firstMissingPositive(int[] nums) {
     3         int n=nums.length;
     4         int i=0;
     5         while(i<n){
     6             if(nums[i]!=(i+1) && nums[i]>=1 && nums[i]<=n && nums[nums[i]-1]!=nums[i]){
     7                 int temp=nums[i];
     8                 int index=nums[i]-1;
     9                 nums[i]=nums[index];
    10                 nums[index]=temp;
    11             }else
    12                 i++;
    13         }
    14         for(i=0;i<n;i++)
    15             if(nums[i]!=(i+1))
    16                 return i+1;
    17         return n+1;
    18     }
    19 }
  • 相关阅读:
    Core Foundation框架(2)命名规范,内省
    Core Foundation框架(1)基础介绍
    Swift 数组,字典
    Swift 操作符
    Swift 可选值
    Swift 元组
    Swift 变量声明
    iOS开发_UI_AutoLayout
    iOS开发_Objective-C_字符串操作
    iOS开发_Objective-C_监听搜索时用户输入的拼音
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10163019.html
Copyright © 2011-2022 走看看