⚡문제 유형
배열,정렬
📝문제
s[i+1] - s[i] == s[1] - s[0] 처럼 각 배열의 요소를 정렬했을 때 차이는 일정합니다. l과 r이 주어졌을 때 [l[i], r[i]]를 범위로 보고 범위에 해당하는 배열 요소가 차이가 일정한지 여부를 배열로 반환하시오.
📘예시
Input: nums = [4,6,5,9,3,7], l = [0,0,2], r = [2,3,5]
Output: [true,false,true]
Explanation:
In the 0th query, the subarray is [4,6,5]. This can be rearranged as [6,5,4], which is an arithmetic sequence.
In the 1st query, the subarray is [4,6,5,9]. This cannot be rearranged as an arithmetic sequence.
In the 2nd query, the subarray is [5,9,3,7]. This can be rearranged as [3,5,7,9], which is an arithmetic sequence.
Input: nums = [-12,-9,-3,-12,-6,15,20,-25,-20,-15,-10], l = [0,1,6,4,8,7], r = [4,4,9,7,9,10]
Output: [false,true,false,false,true,true]
📗풀이
1. l의 길이를 갖는 answer 배열을 true로 채워서 만듦
2. 첫번째 for문을 돌려 l[i]과 r[i]의 범위만큼 slice 해줌
3. 내림차순으로 정렬해준다.
3. 기준으로 잡을 차이를 구하고 두번째 for문을 돌려준다
4. 기준으로 잡은 차이와 다음 요소들의 차이가 틀리면 answer 배열 해당 인덱스의 값을 false로 넣어준다.
📕코드
var checkArithmeticSubarrays = function (nums, l, r) {
const answer = Array(l.length).fill(true);
for (let i = 0; i < l.length; i++) {
let arr = nums.slice(l[i], r[i] + 1);
arr = arr.sort((a, b) => b - a);
let dif = arr[0] - arr[1];
for (let j = 0; j < arr.length - 1; j++) {
if (dif !== arr[j] - arr[j + 1]) {
answer[i] = false;
break;
}
}
}
return answer;
};
'자료구조&알고리즘 > 알고리즘' 카테고리의 다른 글
[LeetCode][JS] 136번 Single Number (0) | 2022.07.12 |
---|---|
[LeetCode][JS] 49번 Group Anagrams (0) | 2022.07.06 |
[LeetCode][JS] 150번 Evaluate Reverse Polish Notation (0) | 2022.06.14 |
[LeetCode][JS] 66번 Plus One (0) | 2022.06.13 |
[LeetCode][JS] 1678번 Goal Parser Interpretation (1) | 2022.06.02 |