본문 바로가기
2. 우당탕탕 개발자/2-1. 공부기록

2020.08.18 findUnsortedSubarray 풀이

by Little Monkey 2020. 8. 19.
반응형

문제 : 정수 배열이 주어지면, 오름차순으로 배열되지 않은 연속적인 sub-array의 갯수를 찾는 문제. 

 

풀이)

연속적인 sub-array 를 묻는 문제는 start / end 나 mid/result 같은 변수를 두개를 두어, 중간 과정을 기록하면서 마지막에 결과 값을 도출해내는 식의 풀이가 많은 것 같다. 이 문제의 경우,  오름 차순으로 정렬된 타겟 배열을 만들고, 모든 배열의 원소를 하나씩 순회하면서 타겟 배열과 값이 다를 때, 그 인덱스의 시작점을 start에 기록하고, end는 그 인덱스 중 가장 큰 수를 기록하는 식이다. 이런식으로 뭔가 중간의 값과 비교하면서 작거나 큰 값을 남겨야 할 때는 Math.min | Math.max 매소드를 활용하는 것이 좋다. 

 

이 때, Array.prototype.sort()는 원 배열을 바꾸는 mutable 한 속성이 있기 때문에, 원 배열을 복사한 후에 진행한다.

 

var findUnsortedSubarray = function(nums) {
  let sortedArr = [...nums].sort((a,b) => a - b);
  
  let start = nums.length - 1, end = 0;
  
  for(let i = 0; i < nums.length; i++) {
    if(sortedArr[i] !== nums[i]) {
      start = Math.min(start, i);
      end = Math.max(end, i);
    }
  }
  return start >= end ? 0 : end - start + 1;
}

 

103ms/ 걸려서 좀 더 나은 방법을 찾아보고 싶다.

 

 

출처 : https://leetcode.com/problems/shortest-unsorted-continuous-subarray

 

Shortest Unsorted Continuous Subarray - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

반응형

'2. 우당탕탕 개발자 > 2-1. 공부기록' 카테고리의 다른 글

2020.08.20 Palindrome Linked List 풀이  (0) 2020.08.20
2020.08.19 Valid Parentheses 풀이  (0) 2020.08.20
16Mar2020 TIL  (0) 2020.03.17
13Mar2020 TIL  (0) 2020.03.13
11Mar2020 TIL  (0) 2020.03.12

댓글