当前位置:首页 > 力扣题解 > 力扣面试03.04题 解题思路和步骤 C++实现带注释,事业单位面试题型及答题技巧

力扣面试03.04题 解题思路和步骤 C++实现带注释,事业单位面试题型及答题技巧

1天前力扣题解27

截图未命名.jpg 力扣面试03.04题 解题思路和步骤 C++实现带注释,事业单位面试题型及答题技巧 C++ 力扣 算法 双指针 栈 队列 第1张

题目概述

力扣面试03.04题是一个关于数组双指针技巧的编程问题。题目要求给定一个未排序的数组,找出其中没有出现的最小的正整数。这个问题可以通过多种方法解决,但本文将重点介绍一种高效且易于理解的方法:使用双指针技巧。

解题思路

解题的关键在于理解数组的特性和双指针技巧的应用。我们需要对数组进行一次遍历,将每个元素放置到其对应的索引位置上,数字2应该放在索引1的位置。使用双指针遍历数组,找到第一个不符合规则的元素,即该元素不等于其索引加1的位置,那么该位置的索引加1就是我们要找的最小正整数。

步骤实现

以下是解题步骤的具体实现:我们遍历数组,将每个元素移动到其正确的位置;我们再次遍历数组,找到第一个不符合规则的元素,从而确定答案。

C++代码实现

#include <vector>
#include <iostream>

int firstMissingPositive(std::vector<int>& nums) {
    int n = nums.size();
    for (int i = 0; i < n; ++i) {
        while (nums[i] > 0 && nums[i] <= n && nums[nums[i] - 1] != nums[i]) {
            std::swap(nums[i], nums[nums[i] - 1]);
        }
    }
    for (int i = 0; i < n; ++i) {
        if (nums[i] != i + 1) {
            return i + 1;
        }
    }
    return n + 1;
}

int main() {
    std::vector<int> nums = {3, 4, -1, 1};
    std::cout << "The first missing positive integer is " << firstMissingPositive(nums) << std::endl;
    return 0;
}


原创内容 转载请注明出处

分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。