문제는 '정렬되지 않은 부분을 찾아라' 입니다
첫번째.
class Solution {
public int findUnsortedSubarray(int[] nums) {
int[] sortedArray = new int[nums.length];
sortedArray = nums.clone();
Arrays.sort(sortedArray);
int startIndex = 0;
int finishIndex = 0;
boolean first = false;
for(int i =0; i<nums.length; i++){
if(nums[i]!=sortedArray[i]) {
finishIndex = i;
if(!first) {
first =true;
startIndex = i;
}
}
}
int result = first? finishIndex-startIndex+1 : 0;
return result;
}
}
아이디어는 '정렬한 배열 하나를 생성한뒤에 비교하여 시작점과 끝점을 찾아 크기를 구하자' 입니다.
이 아이디어의 구현을 위해 Array.clone()를 사용하여 Deep Copy(깊은복사)를 했습니다.
깊은 복사와 얕은 복사에 대해 간략히 설명하자면
얕은 복사(Shallow Copy) : 복사된 배열이나 원본배열이 변경될 때 서로 간의 값이 같이 변경됩니다.
깊은 복사(Deep Copy) : 복사된 배열이나 원본배열이 변경될 때 서로 간의 값은 바뀌지 않습니다.
따라서 일반적으로 우리가 쓰는 복사의 경우, 대다수가 얕은 복사인 경우가 많습니다.
a=b; 같은 경우가 얇은 복사이기 때문입니다. 따라서 깊은 복사를 위한 배열 메소드 clone()를 사용했습니다.
'코딩테스트 > Leet Code' 카테고리의 다른 글
[LeetCode] 121. Best Time to Buy and Sell Stock - 자바스크립트 (0) | 2021.04.09 |
---|---|
[LeetCode] 자바 48. Rotate Image (0) | 2020.08.12 |
[LeetCode] 자바, 20. Valid Parentheses (0) | 2020.08.10 |
[LeetCode] 자바 53. Maximum Subarray (0) | 2020.08.10 |
[LeetCode] 자바 448. Find All Numbers Disappeared in an Array (0) | 2020.08.10 |
댓글