Untitled

 avatar
unknown
plain_text
2 years ago
1.3 kB
4
Indexable
public class Solution {
    int modulo = 1000000007;
    public int solve(ArrayList<Integer> A) {
        int n = A.size();
        Collections.sort(A);
        long power = n-1;
        long base = 2;
        long minpower = 1;
        long maxPower = 1;
        // Fast power
        while(power > 0) {
            if(power % 2 != 0) {
                maxPower = (maxPower * base) % modulo;
            }
            base = (base * base) % modulo ;
            power = power / 2;
        } 
        // 306568771
        long ans = 0;
        
        for(int i = 0 ; i < n ; i++) {
            long sub = (minpower - maxPower + modulo) % modulo ;
            long curr_ans = (A.get(i) * sub) % modulo;
            ans = (ans +  curr_ans) % modulo;
            minpower = (minpower * 2) % modulo;
            maxPower = (maxPower*fastPow(2, modulo-2))%modulo; // This line is updated in your code
        }
        return (int)ans % modulo;
    }

    //Added this method to compute fastPow
    public int fastPow(int a, int n){
        if(n==0){
            return 1;
        }
        if(n==1){
            return a;
        }
        long ans = fastPow(a, n/2);
        ans = (ans*ans)%modulo;
        if(n%2 == 1){
            ans = (ans*a)%modulo;
        }
        return (int)ans;
    }
 }
Editor is loading...