• 第 72 场双周赛【5999. 统计数组中好三元组数目:树状数组+等价转换】


     1 class Solution {
     2 public:
     3     int countPairs(vector<int>& nums, int k) {
     4         int s=0;
     5         for(int i=0;i<nums.size();i++){
     6             for(int j=i+1;j<nums.size();j++){
     7                 if(!((i*j)%k)){
     8                     if(nums[i]==nums[j])
     9                         s++;
    10                 }
    11             }
    12         }
    13         return s;
    14     }
    15 };

     1 class Solution {
     2 public:
     3     vector<long long> sumOfThree(long long num) {
     4         vector<long long> ans;
     5         if(num%3){
     6             return ans;
     7         }
     8         long long t=num/3;
     9         ans.push_back(num/3-1),ans.push_back(num/3),ans.push_back(num/3+1);
    10         return ans;
    11     }
    12 };

    奇数肯定不行。偶数的话从最小的偶数2开始尝试,如果最后减到相同的话就累计到最后一位即可。
     1 #define pb push_back
     2 map<int,int> mp;
     3 class Solution {
     4 public:
     5     vector<long long> maximumEvenSplit(long long finalSum) {
     6         long long num=2;
     7         mp.clear();
     8         vector<long long> ans;
     9         if(finalSum%2) return ans;
    10         while(1){
    11             if(finalSum>=num){
    12                 if(!mp[num]){
    13                     ans.pb(num);
    14                     mp[num]=1;
    15                 }else{
    16                     ans[ans.size()-1]+=num;
    17                     mp[ans[ans.size()-1]]=1;
    18                 }
    19                 finalSum-=num;
    20                 num+=2;
    21                 // cout<<"1: "<<ans[ans.size()-1]<<endl;
    22             }else{
    23                 if(!finalSum) break;
    24                 if(mp[finalSum]) ans[ans.size()-1]+=finalSum;
    25                 else ans.pb(finalSum);
    26                 // cout<<"2: "<<ans[ans.size()-1]<<endl;
    27                 break;
    28             }
    29         }
    30         return ans;
    31     }
    32 };
    33 /*
    34 28
    35 14   14
    36 12   16
    37 6 6 8 8
    38 
    39 4 8 6 10
    40 
    41 12
    42 6 6
    43 4 8
    44 4 2 6
    45 
    46 16
    47 2 4 6 4
    48 */

    等价转换 + 树状数组
    https://leetcode-cn.com/problems/count-good-triplets-in-an-array/solution/
     1 #define ll long long 
     2 #define lowbit(x) (x&(-x))
     3 #define N 666666
     4 
     5 //******************树状数组
     6 ll tree[N];
     7 void add(int x,int y){
     8     for(int i=x;i<N;i+=lowbit(i)) tree[i]+=y;
     9     return ;
    10 }
    11 ll ask(int x){
    12     ll sum=0;
    13     for(int i=x;i;i-=lowbit(i)) sum+=tree[i];
    14     return sum;
    15 }
    16 ll query(int x,int y){
    17     return ask(y)-ask(x-1);
    18 }
    19 map<ll,ll> mp;
    20 class Solution {
    21 public:
    22     long long goodTriplets(vector<int>& nums1, vector<int>& nums2) {
    23         mp.clear();
    24         memset(tree,0,sizeof(tree));
    25         //转化NB
    26         for(int i=0;i<nums1.size();i++) mp[nums1[i]]=i;
    27         for(int i=0;i<nums2.size();i++){
    28             nums2[i]=mp[nums2[i]]+1;
    29         }
    30         ll ans=0;
    31         int len=nums1.size();
    32         for(int i=0;i<nums2.size();i++){
    33             ll num=nums2[i];
    34             ll sum=query(1,num);
    35             ans=ans+sum*(len-1-i-(num-sum)+1)*(1ll);
    36             add(num,1);
    37         }
    38         return ans;
    39     }
    40 };
  • 相关阅读:
    长篇专访科比:成功没秘诀 只有不断努力
    生活哲理
    8个让程序员追悔莫及的职业建议
    优秀程序员必备十大习惯
    回顾马云屌丝岁月的惨状:多次被拒失声痛哭
    程序员,究竟该怎么赚钱?
    洛杉矶凌晨4点-------启航
    iOS越狱开发
    iOS越狱开发中遇到的坑
    macOS上搭建RabbitMQ+MQTT服务器
  • 原文地址:https://www.cnblogs.com/pengge666/p/15916872.html
Copyright © 2020-2023  润新知