力扣面试03.04题 解题思路和步骤 C++实现带注释,事业单位面试题型及答题技巧
题目概述
力扣面试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; }
原创内容 转载请注明出处