6283. 正整数和负整数的最大计数

141 阅读1分钟

题目:
给你一个按 非递减顺序 排列的数组 nums ,返回正整数数目和负整数数目中的最大值。

  • 换句话讲,如果 nums 中正整数的数目是 pos ,而负整数的数目是 neg ,返回 pos 和 neg二者中的最大值。

注意: 0 既不是正整数也不是负整数。

算法: 方法一:二分查找
注意寻找正数时的边界条件

func maximumCount(nums []int) int {
    left, right := 0, len(nums) - 1
    // negtiveCount
    for left < right {
        mid := (left + right) / 2
        if nums[mid] >= 0 {
            if mid - 1 >= 0 && nums[mid - 1] >= 0 {
                right = mid - 1
            } else {
                right = mid
            }
        } else {
            left = mid + 1
        }
    }
    negtiveCount:= left
    
    
    postiveCount := 0 
     // postiveCount
    right = len(nums) - 1
    for left < right {
        mid := (left + right) / 2
        if nums[mid] > 0 {
            if mid - 1 > 0 && nums[mid - 1] > 0 {
                right = mid - 1
            } else {
                right = mid
            }
        } else {
            left = mid + 1
        }
    }
    if nums[left] > 0 {
        postiveCount = len(nums) - left
    }
    return max(negtiveCount, postiveCount)
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}