zoukankan      html  css  js  c++  java
  • * 41. First Missing Positive

    1. 原始题目

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

    示例 1:

    输入: [1,2,0]
    输出: 3
    

    示例 2:

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

    示例 3:

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

    2. 思路---交换法

    第一遍遍历:对于数组每个>=1的元素(正整数)且大小小于数组长度的元素都要交换位置以确保其在数组中的位置正确。

    第二遍遍历:如果当前元素的位置不正确则返回该元素大小+1,否则遍历结束后返回数组长度+1。

    具体过程参考博客

    nums = [ 3 4 -1 1 8 ]

    nums [ 0 ] 等于 3,把 3 放到第 3 个位置,并且把之前第 3 个位置的 -1 放回来,更新 nums [ -1, 4, 3, 1, 8 ]。

    然后继续判断(循环判断)交换回来的数字,nums [ 0 ] 等于 -1,不是正数,忽略。

    nums [ 1 ] 等于 4,把 4 放到第 4 个位置,并且把之前第 4个位置的 1 放回来,更新 nums [ -1, 1, 3, 4, 8 ]。

    然后继续判断交换回来的数字,nums [ 1 ] 等于 1,把 1 放到第 1 个位置,并且把之前第 1 个位置的 -1 放回来,更新 nums [ 1, -1, 3, 4, 8 ]。

    然后继续判断交换回来的数字,nums [ 1 ] 等于 -1,不是正数,忽略。

    nums [ 2 ] 等于 3,刚好在第 3 个位置,不用管。

    nums [ 3 ] 等于 4,刚好在第 4 个位置,不用管。

    nums [ 4 ] 等于 8,我们的 nums 数组只能存 1 到 5,所以同样忽略。

    最后,我们只需要遍历 nums 数组,遇到第一次 nums [ i ] != i + 1,就说明缺失了 i + 1。因为我们的 nums 数组每个位置都存着比下标大 1 的数。

    代码:

     1 class Solution {
     2 public:
     3     int firstMissingPositive(vector<int>& nums) {
     4         for (int i = 0; i<nums.size(); i++){
     5             while ((nums[i] >0) && (nums[i] < nums.size() && (nums[i] != nums[nums[i] - 1]))){  # 注意while
     6                 swap(nums, i, nums[i] - 1);                       # 循环判断处理交换后的位置
     7             }
     8             
     9         }
    10         for (int i = 0; i<nums.size(); i++)
    11             if (nums[i] != i+1)
    12                 return i+1;
    13         return nums.size()+1;
    14     }
    15 
    16     void swap(vector<int>&nums, int i, int j){
    17         int temp = nums[i];
    18         nums[i] = nums[j];
    19         nums[j] = temp;
    20     }
    21 };
    
    
  • 相关阅读:
    build.xml介绍
    assetbundle和ScriptableObject的使用
    unity 错误汇总
    【unity基础系列】编辑器类使用例子
    texturepacker使用心得
    vs特殊的快捷方式
    【unity基础系列】1、unity Texture Type设置为Advanced时纹理的格式列表
    嵌套prefabs的使用
    unity基础知识笔记一(快捷方式、基础概念)
    关于游戏研发一些常用的知识记录
  • 原文地址:https://www.cnblogs.com/king-lps/p/10755607.html
Copyright © 2011-2022 走看看