Lettcode_260_Single Number III

본 고 는 학습 중의 총 결 입 니 다.전재 하 는 것 을 환영 하지만 출처 를 밝 혀 주 십시오.http://blog.csdn.net/pistolove/article/details/50276549
Given an array of numbers  nums , in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.
For example:
Given  nums = [1, 2, 1, 3, 2, 5] , return  [3, 5] .
생각:
(1)주 제 는 하나의 정수 배열 을 정 하 는 것 입 니 다.그 중에서 두 개의 요소 가 한 번 만 나타 나 고 나머지 모든 요소 가 두 번 나타 나 는 것 을 의미 합 니 다.이 두 개의 요소 가 한 번 만 나타 나 는 요 소 를 찾 아 보 세 요.
(2)두 가지 요소 가 한 번 나 타 났 기 때문에^의 방법 으로 해결 할 수 없다.이 는 하나의 맵 을 통 해 이 루어 져 야 합 니 다.그 중에서 key 는 배열 의 요소 이 고 value 는 이 요소 가 배열 에서 나타 나 는 횟수 입 니 다.우선,배열 을 옮 겨 다 니 며 현재 요소 가 map 에 없 으 면 현재 요 소 를 map 에 저장 하고 value 를 1 로 설정 합 니 다.맵 에 존재 하면 대응 하 는 value 값 을 1 로 추가 합 니 다.여기에 옮 겨 다 니 는 요소 가 배열 에서 2 이상 의 요소 수 를 저장 하 는 변 수 를 설정 합 니 다.그 다음 에 배열 을 만 듭 니 다.배열 의 크기 는 원래 배열 의 길이 에서 저 장 된 변수 수 치 를 뺀 다음 에 map 를 옮 겨 다 니 며 map 에서 value 값 이 1 인 요 소 를 만 든 배열 에 순서대로 저장 합 니 다.즉,원 하 는 것 입 니 다.
(3)자세 한 내용 은 아래 코드 를 보십시오.본문 이 너 에 게 도움 이 되 기 를 바란다.
알고리즘 코드 는 다음 과 같 습 니 다.
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

public class Single_Number_III {

	public static void main(String[] args) {
		singleNumber(new int[] { 0, 0, 1, 2 });
	}

	public static int[] singleNumber(int[] nums) {

		if (nums == null || nums.length == 0)
			return nums;

		int len = nums.length;
		int p = 0;
		Map<Integer, Integer> maps = new LinkedHashMap<Integer, Integer>();
		for (int i = 0; i < len; i++) {
			if (maps.get(nums[i]) == null) {
				maps.put(nums[i], 1);
			} else {
				maps.put(nums[i], maps.get(nums[i]) + 1);
				p = p + maps.get(nums[i]);
			}
		}

		int[] arr = new int[len - p];
		int t = 0;
		Set<Integer> keySet = maps.keySet();
		for (Integer integer : keySet) {
			if (maps.get(integer) == 1) {
				arr[t++] = integer;
			}
		}

		return arr;
	}
}

좋은 웹페이지 즐겨찾기