当前位置: 首页 > news >正文

建设信用卡秒批网站佛山网站建设哪家公司好

建设信用卡秒批网站,佛山网站建设哪家公司好,h5页面怎么做,网络推广方式和方法题目描述: 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1: 输入:nums [1,2,0] 输出:3示例 2: 输…

题目描述:

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

请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。

示例 1:

输入:nums = [1,2,0]
输出:3

示例 2:

输入:nums = [3,4,-1,1]
输出:2

示例 3:

输入:nums = [7,8,9,11,12]
输出:1

提示:

  • 1 <= nums.length <= 5 * 105
  • -231 <= nums[i] <= 231 - 1

通过次数

325.7K

提交次数

749K

通过率

43.5%

思路和题解:

设数组长度为n,则确实的第一个正数只能在[1,n+1]的闭区间

思路一:暴力搜索。时间O(n^2),空间O(1),不符合要求

依次判断[1,n]在不在数组里,如果不在就返回那个不在的数,如果都在就返回n+1。代码。

//暴力循环
class Solution {
public:int firstMissingPositive(vector<int>& nums) {int n=nums.size();for(int i=1;i<=n;i++){bool flag=false;for(int j=0;j<n;j++){if(nums[j]==i){flag=true;break;}}if(!flag) return i;}return n+1;}
};

思路二:普通的哈希表。时间O(n),空间O(n),不符合要求。

用一个长度为n的数组来标记[1,n]有没有出现过。

//普通哈希表
class Solution {
public:int firstMissingPositive(vector<int>& nums) {int n=nums.size();vector<bool> hash(n,false);for(int i=0;i<n;i++){//出现了就标记为真if(nums[i]>0&&nums[i]<=n)hash[nums[i]-1]=true;}for(int i=0;i<n;i++){if(hash[i]==false) return i+1;}return n+1;}
};

思路三:原地哈希表。时间O(n),空间O(1)

思路二是我们能想到的比较好的办法了,但是空间复杂度还是不能达到要求,那我们怎么来优化这个空间复杂度O(n)呢?要知道,只用O(n)的时间复杂度,也就是只用一层的循环,要找出缺失的第一个正数的话,不用其他空间来存储正数存在的状态时不可能的。既然必须要用空间来存储一些状态,又只能额外使用常数的空间,那我们只好拿给定的数组nums作为存储状态的空间。也就是说用原数组nums作为哈希表。

问题是怎么标记一个正数是否出现的状态。对于num<=0&&num>n的数,num在[1,n]之外无论怎么变化,都不会改变答案。那就干脆先把数组里所有<=0的数先变成n+1,之后再遍历数组,把每个[1,n]内的数num对应下标处都改为负数。最后再遍历一遍数组,对应元素不为负就说明这个数对应的位置是第一个缺失的正数。

class Solution {
public:int firstMissingPositive(vector<int>& nums) {//原地哈希表//第一个缺失的数只能出现在[1,n+1]的闭区间里int n=nums.size();for(int i=0;i<n;i++){//若出现负数或零或大于n的数,那第一个确实的数就在[1,n]if(nums[i]<=0) nums[i]=n+1;}for(int i=0;i<n;i++){//将[num-1]标记为负,表示正数num没有缺失,num>n时不用管int num=abs(nums[i]);if(num<=n){nums[num-1]=-abs(nums[num-1]);}}for(int i=0;i<n;i++){if(nums[i]>0) return i+1;}return n+1;}
};

http://www.yayakq.cn/news/226871/

相关文章:

  • 网站建设的合同条款公司名称设计logo免费
  • 如何做网站 代码怎么在网站上建设投票统计
  • 重庆找工作的网站小米发布会完整版
  • 酷站官网专门做销售招聘网站
  • 广东网站备案要多久idzoom室内设计师网
  • 国外网站后台模板企业管理有限公司经营范围有哪些
  • 网站访问量查询工具安装nginx wordpress
  • 触摸屏互动网站建设案例做网站需要前台和后台吗
  • c 网站开发实例教学南通高端网站建设咨询
  • 宜兴淘宝网站建设中兴路由器做网站
  • 怎么进入追信魔盒网站开发软件做营销的网站推广
  • 浙江省嘉兴市建设局网站网站怎样做外链
  • 随州便宜做网站聊城网站建设策划建设公司
  • 网站 文件注入做周边的网站
  • 如何做京东优惠券网站网络公司是干什么的
  • 电商网站页面设计网页设计实训总结2000字
  • 网站seo排名2345网址导航下载桌面
  • 网站ui设计要点企业邮箱263登录入口
  • 网站推广软文wordpress功能小工具增加按钮
  • 上海网站建设 分类广告和易企秀类似的软件免费的
  • 网站建设维护有哪些内容网站备案号 查询
  • 做流量网站挂广告还能挣钱吗活动推广软文范例
  • 凡科 360免费建站中国招标投标网查询平台
  • 北京建站工具营销策划方案的步骤
  • 成都网站建设案例单招网免费发布信息网址大全
  • 建设医院网站多少钱网推资源网站
  • 如何细分行业 做网站赚钱个人备案转企业网站期间
  • 做暧暧网站在线观看做网站用php哪些知识点
  • 设计师学习网站百度飙风算法 小网站
  • 怎样做网站网站建设策划书提纲