题解 | #没有出现的编号#
没有出现的编号
https://www.nowcoder.com/practice/875d705df65c401a905f574070e09320
知识点
排序,模拟
思路
首先将这个数组从小到大排序,然后从小到大遍历。
对最大的负数maxx,先初始化为负无穷,遇到比他大的负数就更新即可。若从未更新,说明没有负数,maxx=0
对未出现的最小正整数minn,假设是1。在数组从小到大遍历到正数时,若刚好为minn,说明minn出现了,下一个未出现正整数可能是minn++,再下一次检查即可。否则就是没出现的,此刻的minn即为答案。
代码 c++
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型vector
*/
vector<int> findMissingAndMaxNegative(vector<int>& nums) {
// write code here
vector<int>ans;
int minn=-0x3f3f3f3f;
int maxx=1;
bool flag=1;
sort(nums.begin(),nums.end());
for(auto v:nums)
{
if(v<0&&v>=minn)
{minn=v;
flag=0;
}
if(v>0&&v==maxx)maxx=v+1;
}
if(flag)minn=0;
ans.push_back(maxx);
ans.push_back(minn);
return ans;
}
};