日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

有趣的数字

發布時間:2023/12/31 综合教程 33 生活家
生活随笔 收集整理的這篇文章主要介紹了 有趣的数字 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

到了小Q喪心病狂的衛生間思考時間:

題目:小Q今天在上廁所時想到了這個問題:有n個數,兩兩組成二元組,相差最小的有多少對呢?相差最大呢?

輸入描述:

輸入包含多組測試數據。
對于每組測試數據:
N - 本組測試數據有n個數
a1,a2...an - 需要計算的數據
保證:
1<=N<=100000,0<=ai<=INT_MAX.

輸出描述:

對于每組數據,輸出兩個數,第一個數表示差最小的對數,第二個數表示差最大的對數。

示例1

輸入

6
45 12 45 32 5 6

輸出

1 2
思路:1.首先進行數字排序,若最大值等于最小值,則最大對數=最小對數=n*(n-1)/2
2.用map統計數組中每種數字的個數
3.計算差最小的個數
如果數組中沒有重復數字,說明最小差不為0,最小差肯定是數組中相鄰兩個數的差,因此遍歷數組,統計最小差。
如果數組中有重復數字,說明最小差為0,最小差肯定是數組中相鄰兩個數的差,因此,遍歷一遍數組,并統計最小差。
4.計算差最大的個數
只有一種情況,即最大值和最小值的兩兩組合,故為最大值個數*最小值個數
目前搜集到的一個代碼:
 1 import java.util.ArrayList;
 2 import java.util.Arrays;
 3 import java.util.List;
 4 import java.util.Map;
 5 import java.util.Scanner;
 6 import java.util.TreeMap;
 7  
 8 public class Main {
 9  
10     public static void main(String[] args) {
11         Scanner sc = new Scanner(System.in);
12         while(sc.hasNext()){
13             int n = sc.nextInt();
14             int[] a = new int[n];
15             for(int i=0;i<n;i++){
16                 a[i] = sc.nextInt();
17             }
18              
19             Arrays.sort(a);
20             //如果數組中的值全相同,直接兩兩組合
21             if(a[0] == a[n-1]){
22                 int tmp = (n*(n-1))/2;
23                 System.out.println(tmp + " " + tmp);
24                 continue;
25             }
26             //map用來統計
27             Map<Integer, Integer> map = new TreeMap<Integer, Integer>();
28             for(int i=0;i<n;i++){
29                 if(map.containsKey(a[i]))
30                     map.put(a[i], map.get(a[i])+1);
31                 else
32                     map.put(a[i], 1);
33             }
34             //求差最小個數
35             int minres = 0;
36             if(map.size() == n){
37                 int min = Math.abs(a[1]-a[0]);
38                 for(int i=1;i<n;i++){
39                     int tmp = Math.abs(a[i]-a[i-1]);
40                     if(tmp == min)
41                         minres++;
42                     else if(tmp < min){
43                         min = tmp;
44                         minres = 1;
45                     }
46                 }
47             }else{
48                 for(Integer key : map.keySet()){
49                     int val = map.get(key);
50                     if(val > 1){
51                         minres += (val * (val-1))/2;
52                     }
53                 }
54             }
55             //求差最大個數
56             int maxres = 0;
57             List<Integer> keyset = new ArrayList<Integer>(map.keySet());
58             int val1 = map.get(keyset.get(0));
59             int val2 = map.get(keyset.get(keyset.size()-1));
60             maxres = val1 * val2;
61             System.out.println(minres + " " + maxres);         
62         }
63     }
64  
65 }

總結

以上是生活随笔為你收集整理的有趣的数字的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。