wordpress xampp建站淄博网站制作优化
wordpress xampp建站,淄博网站制作优化,林州网站建设公司,企业信息填报系统登录一、题目 给你一个整数数组 nums#xff0c;其中恰好有两个元素只出现一次#xff0c;其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。
你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。 示例 1#xff1a;
… 一、题目 给你一个整数数组 nums其中恰好有两个元素只出现一次其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。
你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。 示例 1
输入nums [1,2,1,3,2,5]
输出[3,5]
解释[5, 3] 也是有效的答案。示例 2
输入nums [-1,0]
输出[-1,0]示例 3
输入nums [0,1]
输出[1,0]二、思路解析 首先我们可以先做个小优化当 nums 数组长度为 2 时说明这两个元素一定只出现了一次直接返回即可。
然后就要利用到我们熟悉的两条公式 x ^ x 0 x ^ 0 x 由于数组中除了两个数字之外其他数字都出现了两次因此我们对数组中的所有数字进行异或运算得到的结果即为两个只出现一次的数字的异或结果。
在第三部分的代码中我用 n1 和 n2 表示这两个数。
再对数组使用一次 lowbit 运算目的是根据最低位的不同把这两个只出现一次的数字分到两个不同的组。
接着我们在遍历一次数组当有元素和 lowbit 进行或运算后还不等于零则他就是 n1 了。
另一个只出现一次的数就让 n1 和 Double 异或一下就出来了因为 Double 本身就是这两个数的异或。 三、完整代码 class Solution {public int[] singleNumber(int[] nums) {if(nums.length 2){return nums;}int Double 0;for(int i 0 ; i nums.length ; i ){Double ^ nums[i];}int n1 0;int lowbit Double -Double;for(int j 0 ; j nums.length ; j ){if((nums[j] lowbit) ! 0){n1 ^ nums[j];} }int n2 Double ^ n1;return new int[]{n1 , n2};}
} 以上就是本篇博客的全部内容啦如有不足之处还请各位指出期待能和各位一起进步
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/89111.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!