题目:2595.正整数和负整数的最大计数

​​题目来源:

        leetcode题目,网址:2529. 正整数和负整数的最大计数 - 力扣(LeetCode)

解题思路:

       两次二分查找,第一次找出负数与非负数的交界位置。第二次找出非正数与正数的交界位置。然后得出正数数与负整数的个数并返回较大者。

解题代码:

class Solution {
    public int maximumCount(int[] nums) {
        if(nums[nums.length-1]<0 || nums[0]>0){
            return nums.length;
        }
        int left=0;
        int right=nums.length-1;
        int neg=0;
        if(nums[0]==0){
            neg=-1;
        }else{
            while(true){
                int mid=left+(right-left)/2;
                if(nums[mid]>=0){
                    right=mid-1;
                }else if(nums[mid]<0){
                    if(nums[mid+1]>=0){
                        neg=mid;
                        break;
                    }
                    left=mid+1;  
                }
            }
        }


        left=neg;
        right=nums.length-1;
        int pos=neg+1;
        if(nums[right]==0){
            pos=nums.length;
        }else{
            while(true){
                int mid=left+(right-left)/2;
                if(nums[mid]>0){
                    right=mid-1;
                }else if(nums[mid]<=0){
                    if(nums[mid+1]>0){
                        pos=mid+1;
                        break;
                    }
                    left=mid+1;
                }
            }
        }
        return Math.max(neg+1,nums.length-pos);
    }
}
 
  

总结:

        不如直接顺序遍历。

        无官方题解。


你可能感兴趣的:(#,java,leetcode,java)