https://leetcode.com/ 에서 코로나로 인해 나가지 못하는 방구석 개발자들을 위해 30일 코딩 챌린지를 오픈했습니다.
앞으로 30일동안 꾸준히 문제를 풀어서 올려보려 합니다.
더 좋은 코드를 위해 덧글로 피드백 부탁드립니다!
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
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];
}
}
https://www.youtube.com/watch?v=X2nyMQyLy7E
이 답안도 꽤 유용하네요