Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 计算最大可能对的算法_Algorithm - Fatal编程技术网

Algorithm 计算最大可能对的算法

Algorithm 计算最大可能对的算法,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对每个频率

我有一个数字数组,比如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] 我的产量:440
预期输出: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);
        }