zoukankan      html  css  js  c++  java
  • single-number

    /**
    * @author gentleKay
    * 题目描述
    * Given an array of integers, every element appears twice except for one. Find that single one.
    * Note:
    * Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
    * 给定一个整数数组,除一个元素外,每个元素都出现两次。找到那个。
    * 注:
    * 您的算法应该具有线性运行时复杂性。你能在不使用额外内存的情况下实现它吗?
    */

    方法一:(用异或运算)

    使用异或运算之前我们先了解一下,异或运算:

    public class Demo {
    	public static void main(String[] args) {
    		System.out.println(5^5);  	  // 0   相同的两个数 进行异或运算为 0
    		System.out.println(8^8);  	 // 0  
    		System.out.println(5^8^5^8);    // 0  一些数进行异或运算, 里面包含两个数是相同的, 
    		System.out.println(0^3); 	 // 3  任何整数 = 0^任何整数
    		System.out.println(5^8^5^8^3);  // 3 
    	}
    }
    

    接下来,有了一点基础之后进行题目解析,这样题目显得十分简单:

    /**
     * 
     * @author gentleKay
     * 题目描述
     * Given an array of integers, every element appears twice except for one. Find that single one.
     * Note: 
     * Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
     * 给定一个整数数组,除一个元素外,每个元素都出现两次。找到那个。
     * 注:
     * 您的算法应该具有线性运行时复杂性。你能在不使用额外内存的情况下实现它吗?
     */
    
    public class Main05 {
    	public static void main(String[] args) {
    		int[] A = {17,12,5,-6,12,4,17,-5,2,-3,2,4,5,16,-3,-4,15,15,-4,-5,-6};
    		System.out.println(Main05.singleNumber(A));
    		
    		//System.out.println(2^3^4^5^6^7^8^2^3^4^5^6^7^8^9^9);  //使用异或运算 循环叠加 。
    	}
    	
    	public static int singleNumber(int[] A) {
    		int a = A[0];
    		for (int i=0;i<A.length;i++) {
    			a = a ^ A[i];
    		}
    		return a;
        }
    }
    

    方法二:(Set集合)

    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.Set;
    
    /**
     * 
     * @author gentleKay
     * 题目描述
     * Given an array of integers, every element appears twice except for one. Find that single one.
     * Note: 
     * Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
     * 给定一个整数数组,除一个元素外,每个元素都出现两次。找到那个。
     * 注:
     * 您的算法应该具有线性运行时复杂性。你能在不使用额外内存的情况下实现它吗?
     */
    
    public class Main05 {
    	public static void main(String[] args) {
    		int[] A = {17,12,5,-6,12,4,17,-5,2,-3,2,4,5,16,-3,-4,15,15,-4,-5,-6};
    		System.out.println(Main05.singleNumber(A));
    		
    	}
    	
    	public static int singleNumber(int[] A) {
          Set<Integer> set = new HashSet<>();
          int[] a = new int[1];
    		for (int i=0;i<A.length;i++) {
    			if (!set.contains(A[i])) {
    				set.add(A[i]);
    			}else {
    				set.remove(A[i]);
    			}
    		}
    		Iterator<Integer> it = set.iterator();
    		while (it.hasNext()) {
    			return it.next();
    		}
    		return 0;
    
        }
    }
    

      

  • 相关阅读:
    pip 查看软件包 可用版本并安装; pip 查看 numpy 可用版本并安装
    git submodule git 子模块管理相关操作
    git 取消文件跟踪
    C 实战练习题目1
    VC6.0设置注释快捷键
    2019-11-29-WPF-非客户区的触摸和鼠标点击响应
    2019-11-29-VisualStudio-使用新项目格式快速打出-Nuget-包
    2019-11-29-WPF-从触摸消息转触摸事件
    2019-11-29-win7-无法启动-WPF-程序-D3Dcompiler_47.dll-丢失
    2019-11-29-C#-序列类为-xml-可以使用的特性大全
  • 原文地址:https://www.cnblogs.com/strive-19970713/p/11231766.html
Copyright © 2011-2022 走看看