• LeetCode() First Missing Positive


      非常内疚,没想到这样的思路。

    思路:把数组上某一个位置的值放到正确的地方上去(nums[i-1] == i),nums[i] >0 && <n && nums[i] != nums[nums[i]-1]

    class Solution {
    public:
        int firstMissingPositive(vector<int>& A) {
            int i = 0;
            int n=A.size();
        for (; i < n; ){
    
            if (A[i] <= 0 || A[i] == i+1 || A[i] > n || A[i] == A[A[i]-1]) i++; // 无效交换或位置正确
    
            else swap(A[i], A[A[i]-1]); // 交换到正确的位置上
    
        }
    
    
    
        for (i = 0; i < n; i++) if (A[i] != i+1) break; // 寻找第一个丢失的正数
    
        return i+1;
            
        }
    };
    

    题目中一旦要求 O(1) ,不要求开辟多余的空间,那么直觉上应该就是直接操作数组本身,如果这个数还有一个特点,就是应该在 1~n 内,应该要想到 swap().

  • 相关阅读:
    Chapter 14_2 全局变量声明
    chapter 14_1 环境
    chapter 13_4 跟踪table的访问
    Linq to Entity 和 Linq to Object 异同
    ADO.net实体类操作
    XML
    JavaScript
    CSS样式表
    HTML
    java 反射
  • 原文地址:https://www.cnblogs.com/yanqi110/p/4978842.html
Copyright © 2020-2023  润新知