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

博兴网站建设外贸建站推广哪家好

博兴网站建设,外贸建站推广哪家好,网页设计与制作课堂革命典型案例,做网站好还是做商城好消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…

消失的两个数字(hard)

  • 题⽬描述:
  • 解法(位运算):
  • Java 算法代码:
  • 更简便代码

题⽬链接:⾯试题 17.19. 消失的两个数字

题⽬描述:

给定⼀个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。你能在 O(N) 时间内只⽤ O(1) 的
空间找到它们吗?
以任意顺序返回这两个数字均可。
⽰例 1:
输⼊: [1]
输出: [2,3]
⽰例 2:
输⼊: [2,3]
输出: [1,4]
提⽰:
nums.length <= 30000

解法(位运算):

算法思路:
本题就是 268. 丢失的数字 + 260. 只出现⼀次的数字 III 组合起来的题。
先将数组中的数和 [1, n + 2] 区间内的所有数「异或」在⼀起,问题就变成了:有两个数出现了「⼀次」,其余所有的数出现了「两次」。进⽽变成了 260. 只出现⼀次的数字 III 这道题。

Java 算法代码:

class Solution{public int[] missingTwo(int[] nums) {// 1. 先把所有的数异或在⼀起int tmp = 0;for(int x : nums) tmp ^= x;for(int i = 1; i <= nums.length + 2; i++) tmp ^= i;// 2. 找出 a,b 两个数⽐特位不同的那⼀位int diff = 0;while(true){if(((tmp >> diff) & 1) == 1) break;else diff++;}// 3. 将所有的数按照 diff 位不同,分两类异或int[] ret = new int[2];for(int x : nums)if(((x >> diff) & 1) == 1) ret[1] ^= x;else ret[0] ^= x;for(int i = 1; i <= nums.length + 2; i++)if(((i >> diff) & 1) == 1) ret[1] ^= i;else ret[0] ^= i;return ret;}
}

求解方法是利用「异或」+「lowbit」。

由于我们明确了是在 [1,n+2] 中缺失了两个数,我们可以先通过异或 [1,n+2] 以及所有的 nums[i] 来得到缺失两个数值异或和 t。

我们知道异或结果二进制表示为 1 代表了两缺失值该位置数值不同(一个该位置 0,另一个该位置为 1),我们可以根据异或和 t 中任意一位为 1 的位置来将两个缺失值划分到两组中。

更加优雅的方式是使用 lowbit 操作:d = t & -t 可快速得到只保留 t 中最低位 1 的对应数值。

随后将 [1,n+2] 中满足 i & d != 0 的所有 i(含义为对应位置为 1 的数值)与 nums[i] 中满足 nums[i] & d != 0 的所有 nums[i](含义为对应位置为 1 的数值) 进行异或,最终能够确定其中一个缺失值,再结合最开始的异或和 t 即可确定另外一个缺失值。

更简便代码

class Solution {public int[] missingTwo(int[] nums) {// 1. 先把所有的数异或在⼀起int n = nums.length + 2, cur = 0;for (int i = 1; i <= n; i++) cur ^= i;for (int x : nums) cur ^= x;// 2. 找出 a,b 两个数⽐特位不同的那⼀位int t = cur, d = cur & -cur;// 3. 将所有的数按照 diff 位不同,分两类异或cur = 0;for (int i = 1; i <= n; i++) {if ((d & i) != 0) cur ^= i;}for (int x : nums) {if ((d & x) != 0) cur ^= x;}return new int[]{cur, t ^ cur};}
}

时间复杂度:O(n)
空间复杂度:O(1)
注意:
if ((d & i) != 0) cur ^= i;不是if (d & i != 0) cur ^= i;(必须加括号)

http://www.dtcms.com/wzjs/388456.html

相关文章:

  • 网站建设与制作的流程线上推广是什么工作
  • 杭州建站模板重庆seo服务
  • 旅行社电商网站怎么做淘宝关键词搜索量排名
  • 哪家企业网站建设好百度统计流量研究院
  • 手机app开发用的是什么语言seo百度快速排名软件
  • 小企业网站建设的基础知识深圳搜狗seo
  • 建设将网站加入受信网站再试廊坊网站排名优化公司哪家好
  • 做电影网站服务器强力搜索引擎
  • 阳泉推广型网站开发电子网址怎么创建
  • 档案网站建设百度短链接在线生成
  • 两学一做材料上哪个网站找赣州seo优化
  • [ 1500元做网站_验收满意再付款! ]_沛县网络公司整合营销理论
  • 自适应网站的缺点友情链接的英文
  • 济宁哪里有做网站的今天国际新闻最新消息10条
  • 短视频营销经典案例淘宝关键词怎么优化
  • 陕西住房建设厅官方网站手机百度2020最新版
  • 临沂网站建设公司招聘站长网
  • 网站做动态还是静态站长工具友链查询
  • 学做网站快吗生活中的网络营销有哪些
  • 免费ai写作网站3000字线上运营推广方案
  • wordpress 优酷淘宝关键词优化怎么弄
  • the author wordpress石家庄关键词优化软件
  • 论述电子商务网站建设的流程关键词排名监控
  • 让别人做网站应注意什么免费网站建站页面
  • 视频类网站如何做缓存百度爱采购怎么推广
  • 青浦做网站的公司淘宝代运营靠谱吗
  • 旅游网站哪个做的好分析网站
  • 做网站的公司怎么做业务百度排行
  • 网站单页站群搜索引擎优化的概念
  • 大学生做社交网站百度登录个人中心官网