Off-by-one on range boundaries
Wrong move: Loop endpoints miss first/last candidate.
Usually fails on: Fails on minimal arrays and exact-boundary answers.
Fix: Re-derive loops from inclusive/exclusive ranges before coding.
Build confidence with an intuition-first walkthrough focused on array fundamentals.
Given an array nums sorted in non-decreasing order, return the maximum between the number of positive integers and the number of negative integers.
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.
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] <= 2000nums is sorted in a non-decreasing order.Follow up: Can you solve the problem in O(log(n)) time complexity?
Problem summary: 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.
Start with the most direct exhaustive search. That gives a correctness anchor before optimizing.
Pattern signal: Array · Binary Search
[-2,-1,-1,1,2,3]
[-3,-2,-1,0,0,1,2]
[5,20,66,1314]
binary-search)count-negative-numbers-in-a-sorted-matrix)Source-backed implementations are provided below for direct study and interview prep.
// Accepted solution for LeetCode #2529: Maximum Count of Positive Integer and Negative Integer
class Solution {
public int maximumCount(int[] nums) {
int a = 0, b = 0;
for (int x : nums) {
if (x > 0) {
++a;
} else if (x < 0) {
++b;
}
}
return Math.max(a, b);
}
}
// Accepted solution for LeetCode #2529: Maximum Count of Positive Integer and Negative Integer
func maximumCount(nums []int) int {
var a, b int
for _, x := range nums {
if x > 0 {
a++
} else if x < 0 {
b++
}
}
return max(a, b)
}
# Accepted solution for LeetCode #2529: Maximum Count of Positive Integer and Negative Integer
class Solution:
def maximumCount(self, nums: List[int]) -> int:
a = sum(x > 0 for x in nums)
b = sum(x < 0 for x in nums)
return max(a, b)
// Accepted solution for LeetCode #2529: Maximum Count of Positive Integer and Negative Integer
impl Solution {
pub fn maximum_count(nums: Vec<i32>) -> i32 {
let mut a = 0;
let mut b = 0;
for x in nums {
if x > 0 {
a += 1;
} else if x < 0 {
b += 1;
}
}
std::cmp::max(a, b)
}
}
// Accepted solution for LeetCode #2529: Maximum Count of Positive Integer and Negative Integer
function maximumCount(nums: number[]): number {
let [a, b] = [0, 0];
for (const x of nums) {
if (x > 0) {
++a;
} else if (x < 0) {
++b;
}
}
return Math.max(a, b);
}
Use this to step through a reusable interview workflow for this problem.
Check every element from left to right until we find the target or exhaust the array. Each comparison is O(1), and we may visit all n elements, giving O(n). No extra space needed.
Each comparison eliminates half the remaining search space. After k comparisons, the space is n/2ᵏ. We stop when the space is 1, so k = log₂ n. No extra memory needed — just two pointers (lo, hi).
Review these before coding to avoid predictable interview regressions.
Wrong move: Loop endpoints miss first/last candidate.
Usually fails on: Fails on minimal arrays and exact-boundary answers.
Fix: Re-derive loops from inclusive/exclusive ranges before coding.
Wrong move: Setting `lo = mid` or `hi = mid` can stall and create an infinite loop.
Usually fails on: Two-element ranges never converge.
Fix: Use `lo = mid + 1` or `hi = mid - 1` where appropriate.