美团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##笔试题解#