1.문제
Given an array nums sorted in non-decreasing order, return the maximum between the number of positive integers and the number of negative integers.
In other words, if the number of positive integers in nums is pos and the number of negative integers is neg, then return the maximum of pos and neg.
Note that 0 is neither positive nor negative.
오름차순으로 정렬되어있는 숫자 배열 nums가 주어질 때 음수의 갯수와 양수의 갯수중 최댓값을 리턴하는 문제이다. 0은 음수도 양수도 아니다.
Example 1
Input: nums = [-2,-1,-1,1,2,3]
Output: 3
Explanation: There are 3 positive integers and 3 negative integers. The maximum count among them is 3.
Example 2
Input: nums = [-3,-2,-1,0,0,1,2]
Output: 3
Explanation: There are 2 positive integers and 3 negative integers. The maximum count among them is 3.
Example 3
Input: nums = [5,20,66,1314]
Output: 4
Explanation: There are 4 positive integers and 0 negative integers. The maximum count among them is 4.
Constraints:
- 1 <= nums.length <= 2000
- -2000 <= nums[i] <= 2000
- nums is sorted in a non-decreasing order.
2.풀이
- 음수가 끝나는 index를 찾는다
- 찾은 인덱스를 기준으로 음수 배열을 잘라낸다.
- 음수와 양수의 갯수를 센다.
/**
* @param {number[]} nums
* @return {number}
*/
const maximumCount = function (nums) {
let mid = 0;
let pos = 0;
let neg = 0;
for (let i = 0; i < nums.length; i++) {
// 음수가 끝나는 index를 찾는다
if (nums[i] >= 0) {
mid = i;
break;
}
}
// 음수들만 있는 배열
const negative = nums.splice(0, mid);
// 음수의 갯수
neg = negative.length;
// 0이 아닌 양수 갯수
for (let i = 0; i < nums.length; i++) {
if (nums[i] !== 0) {
pos++;
}
}
return Math.max(pos, neg);
};
3.결과
