zoukankan      html  css  js  c++  java
  • LeetCode 面试题56-I

     解题的思路,数组中除了两个不同的元素外其余都两两相等,考虑到若是数组中只有一单独元素不同可以用异或值求解,那么就可以将该数组分成各包含一个单独元素两个数组。

    如何划分数组呢?先对数组整体异或,得到两个单独数的异或值,之后,用这个值作为标志来筛选出后一个单独元素的位置,元素位置确定后就可以分成两个各包含一个单独数字的数组。

    我的题解代码如下,leetcode上运行时间24ms,内存占用6.5MB

    int* singleNumbers(int* nums, int numsSize, int* returnSize){
        int sum=0;
        for(int i=0;i<numsSize;i++) sum^=nums[i];//求得两不同数字的异或值
        int div=1;
        while(!(sum&div)) div<<=1;//找到后一个不同的元素,对数组元素进行分组
        int *result=(int *)malloc(sizeof(int)*2);
        result[0]=0;result[1]=0;//记得要初始化/wulian
        for(int i=0;i<numsSize;i++){
            if(nums[i]&div) result[0]^=nums[i];
            else result[1]^=nums[i];
        }
        *returnSize=2;
        return result;
    }
  • 相关阅读:
    Excel 之查找与替换
    重拾Excel之为什么
    taobao
    祝我生日快乐
    啊哈哈哈哈!自由啦
    我是不是得了抑郁症?
    Be quiet
    tcpdump tutorial
    Java Thread 多线程同步、锁、通信
    java 堆、栈、常量池等
  • 原文地址:https://www.cnblogs.com/runsdeep/p/12792200.html
Copyright © 2011-2022 走看看