做网站的域名怎么申请,ui培训的机构,wordpress 门户插件,棋牌代理平台文章目录 每日一言题目解题思路代码结语 每日一言
十年磨一剑#xff0c;风雨未曾阻挡;愿你乘风破浪#xff0c;不负韶华时光。 题目
题目链接#xff1a;只出现一次的数字
给你一个整数数组 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]
提示
2 nums.length 3 * 104 -231 nums[i] 231 - 1 除两个只出现一次的整数外nums 中的其他数字都出现两次 解题思路
要对按位异或有较深的了解 n ^ n 0 n ^ 0 n 消除n ^m ^n m 交换律n ^ m m ^ n 结合律n ^ m ^ z n ^ (m ^ z) 根据消除律我们可以消除出现次数为偶数的数字按位异或完整个数组后我们会得到一个数z这个数是由两个只出现一次的数按位异或后得到的假设他们分别为m和n。 这个z的二进制位为1的地方表明m和n在这一位上的值不相同一个为0一个为1我们可以依此来给整个数组进行分类将m、n放置在不同的组中然后分别按位异或完整个组最后返回两数就行啦~
代码
int* singleNumber(int* nums, int numsSize, int* returnSize) {int* arr (int*)malloc(sizeof(int)*2);int i0;int ret 0;for(i0;inumsSize;i)ret^nums[i];int tar 0;for(i0;i32;i){if(((ret i)1)1){tar i;break;}}arr[0]0;arr[1]0;for(i0;inumsSize;i){if(((nums[i]tar)1)1){arr[0]^nums[i];}else{arr[1]^nums[i];}}*returnSize 2;return arr;
}结语
请给自己些耐心一口吃不成胖子。 山外青山楼外楼莫把百尺当尽头。 保持空杯心态加油努力吧 都看到这里啦真棒(*^▽^*)
可以给作者一个免费的赞赞吗这将会鼓励我继续创作谢谢大家
编程小白写作如有纰漏或错误欢迎指正