30-Day LeetCoding Challenge - 1Day (Single Number)

w-beom·2020년 4월 1일
0

https://leetcode.com/ 에서 코로나로 인해 나가지 못하는 방구석 개발자들을 위해 30일 코딩 챌린지를 오픈했습니다.

앞으로 30일동안 꾸준히 문제를 풀어서 올려보려 합니다.

더 좋은 코드를 위해 덧글로 피드백 부탁드립니다!

Single Number

Given a non-empty 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?
Example 1:

Input: [2,2,1]
Output: 1

Example 2:

Input: [4,1,2,1,2]
Output: 4

Solution

class Solution {
    public int singleNumber(int[] nums) {
        Arrays.sort(nums);
	int a = nums[0];
		
	//nums의 길이가 1이면 a가 정답이니 바로 return
	if (nums.length == 1) {
		return a;
	}
		
	//정렬된 nums의 nums[0]!=num[1]이면 nums[0] return
	if (a != nums[1])
		return a;
		
	for (int i = 1; i < nums.length - 1; i++) {
		if (nums[i - 1] != nums[i] && nums[i] != nums[i + 1])
			return nums[i];
	}
		
	//위의 for문에서 만족하지 않으면 nums의 마지막 배열 값이 정답이므로 return
	return nums[nums.length - 1];
   }
}
profile
습득한 지식과 경험을 나누며 다른 사람들과 문제를 함께 해결해 나가는 과정에서 서로가 성장할 수 있는 기회를 만들고자 노력합니다.

1개의 댓글

comment-user-thumbnail
2020년 4월 23일

https://www.youtube.com/watch?v=X2nyMQyLy7E
이 답안도 꽤 유용하네요

답글 달기