美团0909笔试 Java
有佬帮忙看下差异值那道题,我的解法有什么问题吗?
下来后自己想的最后一题异或的解法:来个佬指点一下有无问题
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int n=in.nextInt();
int[] arr=new int[n];
for(int i=0;i<n;i++)
arr[i]=in.nextInt();
Map<Point,Integer> map=new HashMap<>();//保存每个组合的异或值
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++)
map.put(new Point(arr[i],arr[j]),arr[i]^arr[j]);
}
System.out.println(getSumWeight(arr,map));
}
public static long getSumWeight(int[] arr,Map<Point,Integer> map){
long sum=0;
int n=arr.length;
int mod=1000000007;
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++) {
long left=i+1;//左边可能得次数
long right=n-j;//右边可能得次数
long t=sum+ (map.get(new Point(arr[i], arr[j])) * (left*right));//计算[i,j]这种组合出现导致的总和
sum = t % mod;
}
}
return sum%mod;
}
static class Point{
int start,end;
public Point(int x,int y){
start=x;
end=y;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Point point = (Point) o;
return start == point.start && end == point.end;
}
@Override
public int hashCode() {
return Objects.hash(start, end);
}
}
#美团java##笔试题解#
