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 };