java – 从两个元素中的整数数组中找到两对
发布时间:2020-12-15 05:13:59 所属栏目:Java 来源:网络整理
导读:两对:如果有两对具有相同数字的骰子,则玩家得分这些骰子的总和.如果不是,则玩家得分为0.例如,放在“两对”上的1,1,2,3,3给出8. 例子: 1,3结果8 1,4结果0 1,2结果6 如何有效地找到这个? 我一直在使用以下代码来查找一对 int max_difference = 0;int val1 =
两对:如果有两对具有相同数字的骰子,则玩家得分这些骰子的总和.如果不是,则玩家得分为0.例如,放在“两对”上的1,1,2,3,3给出8.
例子: 如何有效地找到这个? 我一直在使用以下代码来查找一对 int max_difference = 0; int val1 = 0,val2 = 0; Arrays.sort(dice); for (int i = 0; i < dice.length - 1; i++) { int x = dice[i+1] - dice[i]; if(x <= max_difference) { max_difference = x; val1 = dice[i]; val2 = dice[i+1]; } } pairScore = val1 + val2; 解决方法
我使用频率图,即数字是键,值是计数器(因此Map< Integer,Integer>).但是,由于它用于骰子,您可以使用长度等于最大骰子值(标准骰子为6)的数组来简化骰子.然后检查每个数字的频率并从中获得对的数量.
例: int[] diceFrequency = new int[6]; //assuming d is in the range [1,6] for( int d : dice ) { //increment the counter for the dice value diceFrequency[d-1]++; } int numberOfPairs = 0; int pairSum = 0; for( int i = 0; i < diceFrequency.length; i++ ) { //due to integer division you get only the number of pairs,//i.e. if you have 3x 1 you get 1 pair,for 5x 1 you get 2 pairs int num = diceFrequency[i] / 2; //total the number of pairs is just increases numberOfPairs += num; //the total value of those pairs is the dice value (i+1) //multiplied by the number of pairs and 2 (since it's a pair) pairSum += (i + 1 ) * 2 * num; } if( numerOfPairs >= 2 ) { //you have at least 2 pairs,do whatever is appropriate } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |