做题收获1

简介: 做题收获

做题收获

1.数学从条件推出结果,一步步求结果。但是计算机因为其特点,可以从结果逆推

求一组数字两两配对,和相同,能配多少组

  1. 一开始我直接从条件推,用双指针直接比对一组组的数据,得出和相同的可能,但是时间复杂度过高,因此error
  2. 然后从结果逆推枚举,从题目中可以得到和的范围:<101,然后输入的时候把数据作为下标录入进去,不断凑组合,比较出现的次数。比如:n是5,max<11,从0-11不断枚举,sum=3时,min(a(1),a(2))
package _9yue4;
import java.util.Scanner;
public class A2 {
  public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    int t=sc.nextInt();
    while(t-->0) {
      int n=sc.nextInt();
      int arr[]=new int [101];//这里存放权重数字
      for (int i = 0; i < n; i++) {
        arr[sc.nextInt()]++;//作为下标统计人数
      }
      int max=-1;
      for (int i = 2; i <= 2*n; i++) {//权重1-n,所以和2-2*n
        int sum=0;
        for (int j = 1; j <i; j++) {
          sum+=Math.min(arr[j], arr[i-j]);  
          //找出和相同的情况下的 不同组合可能数
        }
        max=max>sum?max:sum;
      }
      System.out.println(max/2);//因为一组数字成对出现,所以除以2,
      //此外,sum=6 (3,3)这种情况因为是不进位除法可以直接排除掉了
    }
  }
}
相关文章
|
6月前
|
人工智能 BI
牛客小白月赛66
牛客小白月赛66
39 0
|
机器学习/深度学习 人工智能 算法