Algorithm 计算最大可能对的算法
我有一个数字数组,比如arr=[3,4,2,3,1]。这里,arr的索引表示数字,而arr[index]表示该数字的频率。例如,我们有arr 一对数字可以由两个数字组成,因此它们的绝对差为0或1。 我们需要找到最大可能的对。数字的使用频率不能超过其提供的频率。例如,arr对可以是: 1,1,2,2,2,2,3,3,4,4,4,5 因此,答案是6。 注意:这里我们只剩下一个额外的1,但这并不重要 我的做法: 计算每个数字的mod 2,获得0和1的数组,并通过count+=arr[i]/2对每个频率更新计数。 因此,对于示例arr,我将留下: [1,0,0,1,1] 现在,如果我看到任何两个连续的1更新计数为1 它适用于样本测试用例,但在隐藏测试用例中失败。有人能帮我找出我的想法出了什么问题吗 失败案例: [34,2,435,45,57,6,8,3,57,235] 我的产量:440Algorithm 计算最大可能对的算法,algorithm,Algorithm,我有一个数字数组,比如arr=[3,4,2,3,1]。这里,arr的索引表示数字,而arr[index]表示该数字的频率。例如,我们有arr 一对数字可以由两个数字组成,因此它们的绝对差为0或1。 我们需要找到最大可能的对。数字的使用频率不能超过其提供的频率。例如,arr对可以是: 1,1,2,2,2,2,3,3,4,4,4,5 因此,答案是6。 注意:这里我们只剩下一个额外的1,但这并不重要 我的做法: 计算每个数字的mod 2,获得0和1的数组,并通过count+=arr[i]/2对每个频率
预期输出:441请注意,对于您的方法,您不会使用57中的最后一个 但是你可以把这一个和6中的一个配对,另一个6中的一个将与8配对,8将与3配对,57将与235配对-所以所有项目都可以工作
你需要在每一步都做出选择:哪一步更好-让最后一个值空闲或与下一个值配对。注意,在你的方法中,你不使用57中的最后一个 但是你可以把这一个和6中的一个配对,另一个6中的一个将与8配对,8将与3配对,57将与235配对-所以所有项目都可以工作 你需要在每一步都做出选择:哪一步更好——让最后一个值空闲或与下一个值配对。后面的逻辑是 将arr[i]/2计入计数,如果奇数为元素,则将1作为进位 下一个 时间复杂度为On,空间为O1 背后的逻辑是 将arr[i]/2计入计数,如果奇数为元素,则将1作为进位 下一个 时间复杂度为On,空间为O1
您的方法出错的最简单示例:[1,2,1]。如果你贪婪地选择了2,2,你会得到[1,0,1],这样就不可能有更多的匹配了。但最佳配对当然是1,2,2,3。最简单的例子是你的方法出错:[1,2,1]。如果你贪婪地选择了2,2,你会得到[1,0,1],这样就不可能有更多的匹配了。但最佳配对当然是1,2,2,3。
1 three times
2 four times
3 two times
4 three times
5 one time
public static void main(String args[]) {
int[] arr=new int[]{34,2,435,45,57,6,8,3,57,235};
int len=arr.length;
int count=0,prev=0;
if(arr[0]%2!=0)prev=1;
count+=arr[0]/2;
for(int i=1;i<len;i++){
if(prev==1){
arr[i]--;
count++;
}
if(arr[i]%2!=0)prev=1;
else prev=0;
count+=arr[i]/2;
}
System.out.println(count);
}