个人域名 企业网站备案,广州seo技术外包公司,crm客户端,360优化大师软件文章目录 力扣题目代码 力扣题目
给你一个整数数组 nums#xff0c;其中恰好有两个元素只出现一次#xff0c;其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。
你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题… 文章目录 力扣题目代码 力扣题目
给你一个整数数组 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]
代码
思路分析 1.异或两个相同的数等于没有异或经常用于消除出现两次的数字 2.x -x 可以生成一个保留最右边 bit为1的数字其他bit都置为0 3.两个只出现1次的数字那么这个Bit1不是x就是y的再一次全部的数字就可以得到x或者y 此题还是有难度的我看了好多题解才理解上去。
int* singleNumber(int* nums, int numsSize, int* returnSize)
{long long OR 0;/*代表数组元素异或后的值*/int i 0, result1 0, result2 0;long long flag 0;int *arr (int *)malloc(sizeof(int) * 2);/*对数组进行异或处理*/for(i 0; i numsSize; i){OR ^ nums[i];}/*生成一个保留最右边 bit为1的数字其他bit都置为0*/flag OR (-OR);for(i 0; i numsSize; i){if((flag nums[i]) ! 0)/*说明数组此元素的flag位为1*/{result1 ^ nums[i];/*最终得到与flag位相同的那个数字*/}}result2 result1 ^ OR;/*得到另一个数字*/arr[0] result1;arr[1] result2;*returnSize 2;return arr;
}