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

【Swift】LeetCode 41. 缺失的第一个正数

41. 缺失的第一个正数

在这里插入图片描述

题目描述

在这里插入图片描述

思路 and Swift 题解

最开始我解决这道题目的思路是使用一个集合类型来记录数组当中出现过哪些数,由于答案出现的区间只可能在[1, n + 1],因此我们对这个区间当中的数进行遍历,找到没有出现在集合当中的那个数返回即可。

但这道题目要求只使用常数级的额外存储空间,这就意味着我们不能使用额外的数据结构,只能基于原始的数组来找到数组中缺失的第一个正数。

此时,我们要做的就是将这个数组转为一个记录数组中出现过的正数的哈希表。具体来说,首先,对于那些小于等于零的整数,我们直接对其进行一道预处理,令它们的值为n + 1,也就是最后一个可能的答案。然后,我们从头开始对数组进行遍历。我们取每次遍历到的数的绝对值(在 Swift 当中,可以直接使用全局函数abs()),如果它满足nums[i] <= n,则令var num = abs(nums[i]); nums[num - 1] = -abs(nums[num - 1])。这两行代码的含义就是将nums数组本身视为哈希表:如果nums[i]本身是正数,那么就令nums[i] - 1这个位置的值为原来的负数(注意,nums[i]在数组中可能出现过多次),标记nums[i]已经出现过了。

最后,我们从0开始遍历到n - 1,如果哪个位置的值不是负数,就说明i + 1不存在于数组当中,返回i + 1;否则说明[1, n]均出现在了数组当中,返回n + 1

完整的 Swift 题解是:

class Solution {func firstMissingPositive(_ nums: [Int]) -> Int {var nums = Array(nums)var n = nums.countfor i in 0..<n {if nums[i] <= 0 {nums[i] = n + 1}}for i in 0..<n {var num = abs(nums[i])if num <= n {nums[num - 1] = -abs(nums[num - 1])}}for i in 0..<n {if nums[i] > 0 {return i + 1}}return n + 1}
}
http://www.dtcms.com/a/536357.html

相关文章:

  • cuda编程笔记(34)-- 内存访问控制与缓存提示
  • webserver类续
  • 条款22:使用Pimpl惯用法时,将特种成员函数的定义放到实现文件中
  • 基于python大数据的省级城市政企客户业务分析系统
  • 合肥微网站制作初中做语文综合题的网站
  • dedecms做论坛网站广州网页设计师学校
  • Blender + MCP 全流程详细图文教程
  • 自定义classload实现热加载案例
  • 上海网站建设seo站霸网络网站建设推销拜访客户怎么开头
  • Spring Bean的生命周期 第二次思考
  • HttpServletResponse下载文件
  • vue3的路由详解
  • Spring Boot 生产就绪特性浅析(一)
  • 如何做彩票网站信息手机上打开html的软件
  • 【图像处理基石】图像对比度增强入门:从概念到实战(Python+OpenCV)
  • 网站建设公司六安全国连锁装修公司加盟
  • 直播互动小程序端Web运营端接入指南
  • Java—抽象类
  • 坛墨网站建设wordpress 邀请
  • idc网站模版百度提交
  • 树莓派3B+降低功耗及恢复脚本
  • 开源项目解读4-高性能并发缓存库Ristretto
  • 《微信小程序》第五章:登录-API封装
  • MYSQL数据库入门操作
  • 青岛建设集团网站101工业设计有限公司
  • wordpress 网站上传到服务器错误怎么建设手机网站
  • MySQL 下载、安装及配置教程(Msi安装)
  • AWS CloudTrail 可观测最佳实践
  • 商城网站设计公司十大奢侈品排名
  • 建设部网站从哪登陆网站建设学什么书