位运算-异或运算-只出现一次的数字-给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

示例:

输入: [2,2,1]
输出: 1
输入: [4,1,2,1,2]
输出: 4

GO:

func singleNumber(nums []int) int {
    var num int
    for i := 0; i < len(nums); i++ {
         num = num ^ nums[i];
        }
        return num;
}

PHP:

class Solution {

    /**
     * @param Integer[] $nums
     * @return Integer
     */
    function singleNumber($nums) {
        for($i=0;$i<count($nums);$i++){
            $num = $num ^ $nums[$i];
        }
        return $num;

    }
}

  

原文地址:https://www.cnblogs.com/already/p/12111071.html

时间: 2024-10-20 13:17:37

位运算-异或运算-只出现一次的数字-给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素的相关文章

给出2n+1个数,其中有2n个数出现过两次,如何用最简便的方法找出里面只出现了一次的那个数(转载)

有2n+1个数,其中有2n个数出现过两次,找出其中只出现一次的数 例如这样一组数3,3,1,2,4,2,5,5,4,其中只有1出现了1次,其他都是出现了2次,如何找出其中的1? 最简便的方法是使用异或,代码如下: public class XOR { public static void main(String[] args){ int[] arr={3,3,1,2,4,2,5,5,4}; int res=0;//初始值 for(int i=0;i<arr.length;i++){ res ^=

9.11排序与查找(三)——给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,找出数组中的某个元素

/** * 功能:给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,次数不详.找出数组中的某个元素. * 可以假定数组元素原先是按从小到大的顺序排列的. */ /** * 思路:数组被旋转过了,则寻找拐点. * @param a * @param left * @param right * @param x:要搜索的元素 * @return */ public static int search(int[] a,int left,int right,int x){ int mid=(

在线性级别时间内找出无序序列中的第k个元素

在一个无序序列中找出第k个元素,对于k很小或者很大时可以采取特殊的方法,比如用堆排序来实现 .但是对于与序列长度N成正比的k来说,就不是一件容易的事了,可能最容易想到的就是先将无序序列排序再遍历即可找出第k个元素.由于任何基于比较的排序算法不可能用少于Θ(N lgN)次比较来实现将所有元素排序,所以采用排序的方法的时间复杂度是线性对数级别的. 我们可以借鉴快速排序中将序列划分的思想来实现平均情况下线性级别的算法,算法实现如下: 1 public class KthElement { 2 3 pr

8个球7个一样重的,有一个偏重,一个天平,如何两次找出偏重的小球

第一次称的时候,天平两边各放3个球,剩余2个球. 如果天平平衡,说明较轻的球在剩余的两个球中,第二次称的时候只需称剩余的这2个球即可. 如果天平不平衡,从第一次称时相对较轻的那3个球中选2个做第二次称重.第二次称重时,如果天平平衡,则剩下的那个球就是较轻的:如果天平不平衡,较轻的球也就找到了. 原文地址:https://www.cnblogs.com/R4mble/p/8371307.html

已知n个正数:wi, 1&lt;=i&lt;=n, 和M。要求找出{wi }的所有子集使得子集内元素之和等于M。例如: n=4, (w1,w2,w3,w4)=(11,13,24,7),M=31 则满足要求的子集是(11,13,7)和(24,7)。

#include<stdio.h> int M,n,i; int x[100]; int w[100]; void SumOfSub(int s, int k, int r)//s:当前和数 k:当前个数 r:总数和 { x[k]=1; if(s+w[k]==M) //子集找到 { printf("子集为:"); for(i=1; i<=k; i++) if(x[i]==1) printf("%d ",w[i]); printf("\n&

lc 只出现一次的数字 (异或运算)

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 异或解法: public class Solution2 { public int singleNumber(int[] arr) { // invalid check if (arr.length == 0) { return -1; } int result = 0; for (int i = 0; i < arr.

LeetCode137只出现一次的数字——位运算

题目 题目描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现三次.找出那个只出现一次的元素. 说明:你的算法应该具有线性时间的复杂度.你可以不使用额外的空间来实现吗? 思路 题目要求线性复杂度,一般的算法做不到,不难想到用位运算.但怎么进行位运算,比较难想到. b = (b ^ x) & ~a; a = (a ^ x) & ~b; ^ 相当于除去原有元素,添加新元素, a &~  b 相当于从a集合中除去b集合中的所有元素. int len = nums.s

LeetCode 136. 只出现一次的数字(Single Number)

题目描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 解题思路 由于相同的两个数异或运算结果一定为0,所以讲数组中的数依次异或,最后所有出现两次的数异或结果为0,只剩下出现一次的数,即异或结果. 代码 1 class Solution { 2 public: 3

只出现一次的数字 [LeetCode]

题目: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 审题:除了某个元素只出现一次以外,其余每个元素均出现两次.1.线性时间复杂度:要求我们的代码时间复杂度最高为O(n),不能有嵌套循环等.2.不使用额外空间:要求空间复杂度最高为O(1). 解题:方法一:(异或法