1)题目:
2)代码:
//由于数组只有‘1’和‘0’两种元素,可以通过遍历分别将他们的总个数记录下来,当我们再次遍历时,通过已经出现的‘1’和‘0’的个数(左边)
//可以知道未出现的1和0的个数(右边)。实践发现右边得分即为‘0’的个数,可通过第二次遍历得到,故而第一次只需求‘1’的总数。
class Solution {
public List<Integer> maxScoreIndices(int[] nums) {
int rCounter=0; //记录右边的‘1’的个数。
int lCounter=0;//记录左边‘0’的个数。
int sum=0; //记录当前得分
int maxSum=0; //记录已知最大得分
ArrayList<Integer> list = new ArrayList<>();
//存在全部为右边的情况。
list.add(0);
for (int i :nums) {
if (i==1) {
rCounter=rCounter+1;
}
}
maxSum=rCounter; //将以索引0划分的得分假设为当前最高得分。
for (int i = 0; i < nums.length; i++) {
if (nums[i]==1) {
rCounter--; //左边出现‘1’,右边‘1’的数量减一。
}
else {
lCounter++;
}
sum=lCounter+rCounter;
//当前得分高,则清空,重写添加
if (sum>maxSum){
list.clear();
maxSum=sum;
list.add(i+1);
}else if (sum==maxSum){
list.add(i+1);
}
}
return list;
}
}
3)运行结果: