加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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.

例子:
1,3结果8
1,4结果0
1,2结果6

如何有效地找到这个?

我一直在使用以下代码来查找一对

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
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读