利用性质解题
class Solution {
public:
int sumSubseqWidths(vector<int>& A) {
sort(A.begin(),A.end());
long p = 1;
long res= 0 ;
const long mod = 1e9+7;
for(int i=0;i<A.size();i++,p = (p<<1)%mod)
res = (res+A[i]*p-A[A.size()-i-1]*p)%mod;
return (res+mod)%mod;
}
};
直接dfs生成所有序列,超时
class Solution {
public:
int res = 0;
void dfs(int idx,vector<int> A,vector<int> &cur){
if(cur.size()!=0){
int min_val=INT_MAX,max_val=INT_MIN;
for(auto num:cur){
min_val = min(min_val,num);
max_val = max(max_val,num);
// cout<<num<<" ";
}
res += max_val-min_val;
//cout<<endl;
}
if(idx==A.size()) return;
for(int i=idx;i<A.size();i++){
cur.push_back(A[i]);
dfs(i+1,A,cur);
cur.pop_back();
}
}
int sumSubseqWidths(vector<int>& A) {
vector<int> cur;
dfs(0,A,cur);
// cout<<"final res "<<res<<endl;
return res;
}
};