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

示例 1:

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

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

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

你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/first-missing-positive
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
//这是看了解答后的代码 满足题意 但速度没提高太多
int size = nums.size(); int *numsHash;
int size_hash = size +; //创建一个哈希表 初始化为0
numsHash = new int[size_hash]();
//遍历nums 对于小于数组长度的元素在哈希表中打个标记
//对于比数组长度大的数据可以忽略,因为第一个缺失的正数没这么大
for (int i = ; i < size; ++i)
{
if (nums[i] > && nums[i] < size_hash)
{
numsHash[nums[i]] = ;
}
} //遍历哈希表 找出第一个没打标记的
int *end_pos = numsHash + size_hash;
for (int *p = numsHash + ; p != end_pos; ++p)
{
if (*p == )
{
return p - numsHash;
}
} return size_hash;
} int firstMissingPositiveNew(vector<int>& nums) { //这是我自己想的答案,不符合题目O(n)要求,但排名也挺高
//排序 然后找出第一个大于0的数字
//顺序查找下去,直到发现本元数比上一个元素大1就说明找到了
sort(nums.begin(), nums.end());
       //从1开始找出第一个不在数组里面的正数 慢
//for (int i = 1; i <= INT_MAX; ++i)
//{
// if (!binary_search(nums.begin(), nums.end(), i))
// {
// return i;
// }
//} auto it = upper_bound(nums.begin(), nums.end(), ); if (it == nums.end() || *it != ) return ; for (++it; it != nums.end(); ++it)
{
if ((*it - *(it - )) > )
{
return *(it - ) + ;
}
} return *(it - ) + ;
}
};
执行结果:

通过
显示详情
执行用时 :4 ms, 在所有 cpp 提交中击败了83.16%的用户
内存消耗 :8.7 MB, 在所有 cpp 提交中击败了73.72%的用户

最新文章

  1. 简要分析webpack打包后代码
  2. JSP与EL隐式对象
  3. Unity3D 之脚本架构,优雅地管理你的代码
  4. SSH端口映射
  5. 完全搞懂傅里叶变换和小波(1)——总纲&lt;转载&gt;
  6. HackerRank &quot;Morgan and a String&quot;
  7. 【转载】hadoop的版本问题
  8. position:absolute,绝对定位和相对定位,JQ隐藏和显示
  9. Aspose.word总结
  10. 自定义View的编写
  11. 使用DFA算法对敏感词进行过滤
  12. ubuntu root 设置
  13. SpringMVC(2)—SpringMVC整合Spring的HelloWorld
  14. 利用koa打造restful API
  15. Wechall 部分WP
  16. 突破单机多实例Elasticsearch
  17. 浅谈Java变量的初始化顺序详解
  18. merc_timer_handle_t函数的使用
  19. KL散度(Kullback-Leibler_divergence)
  20. String.replace使用技巧

热门文章

  1. 2019-9-11:渗透测试,基础学习,vim编辑器,笔记
  2. JSON的使用场景及注意事项介绍
  3. Lab6:进程的调度
  4. 记一个bootloader的cache问题
  5. android 活动监听是否点击某个view
  6. U盘安装centos 7 提示 “Warning: /dev/root does not exist
  7. iText + Freemarker实现pdf的导出,支持中文、css以及图片,页眉页脚,页眉添加图片
  8. 关于layer的基本所有的事件全部失效问题
  9. js对象可扩展性和属性的四个特性(下)
  10. shell ssh 远程机器 追加文件内容