【LeetCode: 2529. 正整数和负整数的最大计数 + 模拟 + 计数】-LMLPHP

【LeetCode: 2529. 正整数和负整数的最大计数 + 模拟 + 计数】-LMLPHP

【LeetCode: 2529. 正整数和负整数的最大计数 + 模拟 + 计数】-LMLPHP

🚩 题目链接

⛲ 题目描述

给你一个按 非递减顺序 排列的数组 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 按 非递减顺序 排列。

🌟 求解思路&实现代码&运行结果


⚡ 模拟 + 计数

🥦 求解思路
  1. 方法一:根据题目的意思直接计数模拟即可。
  2. 方法二:二分查找。数组有序,我们通过二分找到第一个大于0的下标i,[0,i-1]表示小于0的i个数,[i,n-1]表示大于0的n-j个数,返回最终更多的那个。
  3. 有了基本的思路,接下来我们就来通过代码来实现一下。
🥦 实现代码
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);
    }
}
🥦 运行结果

【LeetCode: 2529. 正整数和负整数的最大计数 + 模拟 + 计数】-LMLPHP


💬 共勉

【LeetCode: 2529. 正整数和负整数的最大计数 + 模拟 + 计数】-LMLPHP

【LeetCode: 2529. 正整数和负整数的最大计数 + 模拟 + 计数】-LMLPHP

04-10 17:53