一、题目叙述:
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?
Subscribe to see which companies asked this question.
二、解题思路:
Easy题,但今天写的都很不顺。。。
思路1:
(1)给数组排序
(2)利用arraylist,碰见list中没有的加进来,以及有的删掉,最后list中剩下的就是单独的。
思路2(参考):
(1)给数组排序(不用排序)
(2)利用异或原理,与0异或为本身,两个数相同异或为0.
三、源码:
1、
import java.util.ArrayList;
import java.util.Arrays;
public class Solution
{
public int singleNumber(int[] nums)
{
int N = nums.length;
//if (N == 0) return 0;
Arrays.sort(nums);
ArrayList<Integer> res = new ArrayList<Integer>();
for (int i = 0; i < N; i++)
{
if (res.contains(nums[i]))
{
res.remove((Integer)nums[i]);
continue;
}
else
res.add(nums[i]);
}
return res.get(0);
}
public static void main(String args[])
{
Solution solution = new Solution();
int[] nums = {1};
}
}
2、
import java.util.ArrayList;
import java.util.Arrays;
public class Solution
{
public int singleNumber(int[] nums)
{
int N = nums.length;
//if (N == 0) return 0;
Arrays.sort(nums);
int x = 0;
for (int i = 0; i < N; i++)
{
x = x ^ nums[i];
}
return x;
}
public static void main(String args[])
{
// ListNode a = new ListNode(1);
// ListNode first = a;
// a.next = new ListNode(1);
// a = a.next;
// a.next = new ListNode(2);
//String a = "";
//String b = "";
// int[] digits = {0};
Solution solution = new Solution();
// int[][] abc = {{2}};
int[] nums = {1};
// for(int i = 0; i < abc.length; i ++)
// ListNode res = solution.deleteDuplicates(first);
// while (res != null)
// {
System.out.print(solution.singleNumber(nums));
// res = res.next;
// }
}
}