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

网站如何做淘宝支付谷歌商店官网

网站如何做淘宝支付,谷歌商店官网,一个公司可以做几个网站备案,如何推广企业网站41. 缺失的第一个正数 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1: 输入:nums [1,2,0] 输出:3 解释:范围 [1,…

41. 缺失的第一个正数

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。
示例 1:
输入:nums = [1,2,0]
输出:3
解释:范围 [1,2] 中的数字都在数组中。
示例 2:
输入:nums = [3,4,-1,1]
输出:2
解释:1 在数组中,但 2 没有。
示例 3:
输入:nums = [7,8,9,11,12]
输出:1
解释:最小的正数 1 没有出现。
提示:
1 <= nums.length <= 105
-231 <= nums[i] <= 231 - 1

题解

题目看起来很简单,寻找未出现过的最小正整数

很自然的想法就是用哈希表统计各个数字出现的次数,然后从1开始递增寻找是否出现过,第一个未出现的数字就是答案

但是注意到题目的要求是只使用常数级别额外空间的解决方案,也就是说不能开辟一个哈希表,需要在原数组上进行操作

接着对题目进行分析,我们发现:对于 n 个数的数组,最大的答案为 n+1,即数组内是 1,2,3…n 这些数各一个
否则只要有任何一个 1~n 之外或者重复的数,那么1~n之间必定有数字没出现,最小的即为我们的答案

  • 所以答案在 1~n+1 之间,而对于数组我们只关心 1~n 之间的数字,其余的数字对答案没有影响

接下来我们考虑如何在数组内原地操作

由于我们仅关心 1~n 的数字,而原数组恰好又是 n 大小,不妨将原数组作为哈希表,记录 1~n
用 nums[i] 记录 i+1
我们并不能直接用 nums[i] 记录 i+1 出现的次数,因为原数组内存储着需要的数据,不能直接修改原数组中的数据
那么我们不妨“一个萝卜一个坑",将 nums[i] 放到下标为 nums[i]-1 的位置上,并且考虑到不能修改原数组,我们将 nums[i] 与 nums[nums[i]-1] 进行交换,于是我们遍历数组,将数字放到对应的位置上,最后再遍历数组,第一个数字与位置不对的位置就是我们的答案

实现细节

  1. 遍历数组,此时位置为 i
  2. 如果 nums[i] 在 1~n 之外,我们不用处理它,因为它对答案没有影响
  3. 如果 nums[i] 在 1~n 之间,我们需要判断位置 nums[i]-1 上是否已经放置了对应的数 num[i]它是否在位置 nums[i]-1 上) ,没有的话就将其与对应位置的数进行交换,否则同样不做处理
  4. 然后我们接着看位置 i 上换来的新数据,重复以上过程
  5. 位置 i 处理结束后 i++
  • 注意,数组中会含有重复的数据
    因此步骤3我们不能去直接判断数字 nums[i] 是否在对应位置 nums[i]-1 上
    因为位置 nums[i]-1 上的数可能是另一个 nums[i],这样我们交换后再看换来的 nums[i],由于 nums[i] 不在对应位置,会接着把之前换过去的 nums[i] 换回来,这样就死循环了
    为了应对这种情况,我们直接去判断 nums[i] 对应的位置上是否是正确的数,是正确的数就不用处理了,多余的数和范围外的数一样对答案没有影响,这样面对重复的数字就不会一直交换了

代码如下↓

class Solution {
public:int firstMissingPositive(vector<int>& nums) {int n=nums.size();int res=n+1;for(int i=0;i<n;i++){if(nums[i]>=1 && nums[i]<=n && nums[i]!=nums[nums[i]-1]){swap(nums[nums[i]-1],nums[i]);i--;}}for(int i=0;i<n;i++){if(nums[i]!=i+1){res=i+1;break;}}return res;}
};
http://www.dtcms.com/wzjs/157604.html

相关文章:

  • 单位网站设计流程步骤重庆森林经典台词截图
  • 动态网站结构谷歌引擎搜索
  • 网站搭建的中国婚恋网站排名
  • 做外贸的b2c网站seo如何去做优化
  • 利川网站建设网站seo排名优化软件
  • 高品质的佛山网站建设网络推广方案例子
  • 有个网站是做视频相册的域名注册服务机构
  • 电商类网站建设需要多少钱百度推广客户端mac版
  • java网站开发相关的书网站推广营销运营方式
  • 怎么建免费企业官网站外贸推广如何做
  • 政府门户网站建设工作总结长沙网络营销公司排名
  • 一小时做网站seo系统
  • 南京网站建设设计网络域名怎么查
  • 备案号是哪个网站推广链接
  • 简单的工作室网站模板网上怎么做推广
  • 番禺网站建设服务win10系统优化
  • 政务信息网站的建设的意义免费域名注册服务网站
  • 做微商必会的软件网站做一个公司网站大概要多少钱
  • 静海区网站建设推广今日头条淄博新闻
  • wordpress主题中文字体插件seo监控系统
  • 建筑装修设计网站大全seo的培训课程
  • 公司做网站费用记到哪个科目互动营销
  • 做兽药网站用什么图片好要做网络推广
  • web的盒子模型关键词优化的原则
  • 网站开发基础最近一周新闻
  • 网站建设-纵横网络seo优化博客
  • 织金县政府关于网站建设互换链接的方法
  • 公司简介ppt案例seo工程师
  • 做物流的网站有哪些功能免费站推广网站2022
  • 个人网站建设费用如何进行推广