class Solution {
public static int getMaxLen(int[] nums) {
int flag_num = 0;//负数的个数
int flag_i = -1;//0出现的位置
int first = -1;//第一个负数出现的位置
int last = -1;//最后一个负数出现的位置
for (int i = 0; i < nums.length; i++) {
flag_i = (nums[i] == 0) ? i : flag_i;
flag_num = (nums[i] < 0) ? flag_num += 1 : flag_num;
if (flag_num == 1 && first==-1) {//(first==-1是为了只在检测到第一个负数的时候肤质)
first = i;
}
if (nums[i] < 0) {//找最后一个负数出现的位置
last = Math.max(last, i);
}
}
if (flag_i == -1) {//整个数组没有0的情况
if (flag_num % 2 == 0) return nums.length;//负数个数为偶数相当于全是正数,直接返回数组的长度
return (nums.length - first-1) >= (last ) ? nums.length - first-1 : last ;//零的个数为奇数个时,应该删除一个,删除第一个还是最后一个取决于第一个负数左边的数组长度,与最后一负数右边的数组长度,取长度小的那个删除,才能保证整个数组的长度还是最长的
}
//有0的情况在零的位置将原来的数组进行划分,递归
return Math.max(getMaxLen(Arrays.copyOfRange(nums,0,flag_i)),getMaxLen(Arrays.copyOfRange(nums,flag_i+1,nums.length)));
}
}
哪里出错了???
*给我最后测试了一个超级大的数组,是玩不起吗?
还是思路不对