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

内容展示类网站完整网站开发看什么书

内容展示类网站,完整网站开发看什么书,做网站常用工具,h5视频怎么制作教学41. 缺失的第一个正数给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 这题要求空间复杂度为O(1),要么定义单个变量,要么原地操作。定义长度为n的数…
41. 缺失的第一个正数给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 

这题要求空间复杂度为O(1),要么定义单个变量,要么原地操作。定义长度为n的数据结构空间复杂度应该是O(n)。我写出来就是空间复杂度O(n)的算法,时间复杂度O(n)。但是能通过… 思路就是用HashSet的contains方法,从1往后看哪个不包含了。
注意,我最开始不是用的set,用的Arrays.asList(newNums).contains(i),这样会超时,换成set就不会超时了。去看了下这两个contains的时间复杂度。

Arrays.asList(...).contains(...): 这是一个链式调用,Arrays.asList 创建一个固定大小的列表,然后 contains 方法在这个列表上进行线性搜索,时间复杂度为 O(n)HashSet.contains 方法的时间复杂度是 O(1)。这意味着在集合中查找元素的时间不会随着集合的大小而增加。在 HashSet 内部,元素是通过计算其哈希码然后存储在基于这个哈希码的位置上的。因此,查找元素时只需要计算该元素的哈希码并查找对应的存储位置即可。如果该位置上有元素且通过 equals 方法比较也匹配,则找到了元素;否则,没有找到元素。
这个特性使得 HashSet.contains 方法能够非常快速地确定元素是否存在于集合中,无论集合中有多少元素。 

我的代码
Arrays.stream(nums).boxed().toArray(Integer[]::new);这一句是为了把int类型转为Integer类型,因为Arrays.asList只能用包装类

这个方法接受一个泛型参数 T,表示数组或者参数的类型。T 必须是一个引用类型,不能是一个基本类型,例如 int, double, char 等。如果传入一个基本类型的数组,Arrays.asList() 会把它当作一个 Object 类型的元素,而不是把它的每个元素当作 Object 类型。这样就会导致返回的 List 只有一个元素,就是原始数组本身。
class Solution {public int firstMissingPositive(int[] nums) {Integer[] newNums = Arrays.stream(nums).boxed().toArray(Integer[]::new);Integer i = 1;Set<Integer> set = new HashSet<>(Arrays.asList(newNums));while (set.contains(i)) {i++;}return i;}
}

官方解法
interesting!有一种手动hash的感觉。
1.把<=0的数改为n+1,这一步就是为了出去非正数,因为他们不影响结果。只需要在正数里面找没出现过的。用这个n+1是因为n个数,里面没出现过的正整数最大只能到n+1,用n+1赋值不影响结果。这里用一个正无穷也是一样的效果。
2.遍历数组中的每一个数x, 将x的绝对值-1作为下标,将这个下标对应的数变成负数(已经是负数就不变)。这一步就是就类似于一个大小为n的数组M,数组M中最大的数为y。那就定义一个大小为y的数组N,然后把M数组中的值-1作为下标散列到数组N中去。然后从前往后遍历,没有被散列到的位置+1就是没出现过的最小的数。
3.按照第2步描述的思想遍历找结果

class Solution {public int firstMissingPositive(int[] nums) {int n = nums.length;for (int i = 0; i < n; ++i) {if (nums[i] <= 0) {nums[i] = n + 1;}}for (int i = 0; i < n; ++i) {int num = Math.abs(nums[i]);if (num <= n) {nums[num - 1] = -Math.abs(nums[num - 1]);}}for (int i = 0; i < n; ++i) {if (nums[i] > 0) {return i + 1;}}return n + 1;}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/first-missing-positive/solutions/304743/que-shi-de-di-yi-ge-zheng-shu-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
http://www.yayakq.cn/news/744088/

相关文章:

  • 珠海专业机械网站建设wordpress下载弹窗插件
  • 怎么在手机上做网站北京环球影城小包也要寄存吗
  • 四川省优质校建设 网站岳阳网警
  • 有没有网站是免费做店招图片的企业网站源码去一品资源网
  • 惠州网站建设多少钱东莞网站制作哪家最便宜
  • 小说网站如何做深圳网站小程序设计开发
  • 自己做的网站怎么被百度收录公司网站怎么更新维护
  • 学东西的网站中企动力网站推广
  • 帮人做彩票网站支付接口网站设置首页连接分类页的视频教程
  • 天猫建设网站的理由百度账户
  • 国外视频模板网站e上海卖房网站
  • 台州网站排名优化费用里面云智能建站
  • 做网站数据库要建什么表北京市城乡建设部网站首页
  • 网站第三方统计代码广州建设大厦地址
  • 版面设计东莞seo建站费用
  • 电子商务网站建设清华大学网站流量狂刷器
  • 为什么网站上传照片传不上去免费个人网址
  • 未备案的网站无锡网站推广优化公司哪家好
  • 网站建设与管理实施方案高端网站定制设计
  • 男人和女人做污的视频网站大连龙采做网站
  • 全国卫生计生机构建设管理系统网站网站开发培训 价格
  • 泰州建站价格网站建设的7种流程图
  • 安装网站大牌网站设计
  • 自己的电脑做服务器,并建网站东坑镇做网站
  • 十堰网站开发培训安卓手机怎么搭建网页
  • 安徽理工大学新校区建设网站莱芜吧莱芜贴吧
  • 烟台做网站案例百度一下首页登录
  • 在网站里文本链接怎么做2008建设网站
  • 网站设计客户案例学视频剪辑制作
  • dz网站如何做301房地产销售话术