🚩 题目链接
⛲ 题目描述
给你一个按 非递减顺序 排列的数组 nums ,返回正整数数目和负整数数目中的最大值。
换句话讲,如果 nums 中正整数的数目是 pos ,而负整数的数目是 neg ,返回 pos 和 neg二者中的最大值。
注意:0 既不是正整数也不是负整数。
示例 1:
输入:nums = [-2,-1,-1,1,2,3]
输出:3
解释:共有 3 个正整数和 3 个负整数。计数得到的最大值是 3 。
示例 2:
输入:nums = [-3,-2,-1,0,0,1,2]
输出:3
解释:共有 2 个正整数和 3 个负整数。计数得到的最大值是 3 。
示例 3:
输入:nums = [5,20,66,1314]
输出:4
解释:共有 4 个正整数和 0 个负整数。计数得到的最大值是 4 。
提示:
1 <= nums.length <= 2000
-2000 <= nums[i] <= 2000
nums 按 非递减顺序 排列。
🌟 求解思路&实现代码&运行结果
⚡ 模拟 + 计数
🥦 求解思路
- 方法一:根据题目的意思直接计数模拟即可。
- 方法二:二分查找。数组有序,我们通过二分找到第一个大于0的下标i,[0,i-1]表示小于0的i个数,[i,n-1]表示大于0的n-j个数,返回最终更多的那个。
- 有了基本的思路,接下来我们就来通过代码来实现一下。
🥦 实现代码
class Solution {
public int maximumCount(int[] nums) {
int n = nums.length;
int pos = 0, neg = 0;
for (int i = 0; i < n; i++) {
if (nums[i] > 0)
pos++;
if (nums[i] < 0)
neg++;
}
return Math.max(pos, neg);
}
}