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