示例 1:
输入:nums = [3,1,2,2,2,1,3], k = 2输出:4解释:
总共有 4 对数符合所有要求:
- nums[0] == nums[6] 且 0 * 6 == 0 ,能被 2 整除。
- nums[2] == nums[3] 且 2 * 3 == 6 ,能被 2 整除。
- nums[2] == nums[4] 且 2 * 4 == 8 ,能被 2 整除。
- nums[3] == nums[4] 且 3 * 4 == 12 ,能被 2 整除。
示例 2:
输入:nums = [1,2,3,4], k = 1输出:0解释:由于数组中没有重复数值,所以没有数对 (i,j) 符合所有要求。
提示:
class Solution {
public:
int countPairs(vector<int>& nums, int k) {
int i,j,n,count=0;
n=nums.size();
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(nums[i]==nums[j]&&(i*j)%k==0)
{
count++;
// printf("%d,%d\n",i,j);
}
}
}
return count;
}
};
示例 1:
输入:num = 33输出:[10,11,12]解释:33 可以表示为 10 + 11 + 12 = 33 。
10, 11, 12 是 3 个连续整数,所以返回 [10, 11, 12] 。
示例 2:
输入:num = 4输出:[]解释:没有办法将 4 表示成 3 个连续整数的和。
提示:
缩小三个数的范围减小时间复杂度
class Solution {
public:
vector<long long> sumOfThree(long long num) {
vector<long long> res;
int length=1e6;
for(long long i=num/3-length;i<num/3+length;i++)
{
if(i*3+3==num)
{
res.push_back(i);
res.push_back(i+1);
res.push_back(i+2);
return res;
}
}
return res;
}
};
示例 1:
输入:finalSum = 12输出:[2,4,6]
解释:以下是一些符合要求的拆分:(2 + 10),(2 + 4 + 6) 和 (4 + 8) 。(2 + 4 + 6) 为最多数目的整数,数目为 3 ,所以我们返回 [2,4,6] ,[2,6,4] ,[6,2,4] 等等也都是可行的解。
示例 2:
输入:finalSum = 7输出:[]
解释:没有办法将 finalSum 进行拆分。所以返回空数组。
示例 3:
输入:finalSum = 28输出:[6,8,2,12]
解释:以下是一些符合要求的拆分:(2 + 26),(6 + 8 + 2 + 12) 和 (4 + 24) 、(6 + 8 + 2 + 12) 有最多数目的整数,数目为 4 ,所以我们返回 [6,8,2,12] 。[10,2,4,12] ,[6,2,4,16] 等等也都是可行的解。
提示:
class Solution {
public:
vector<long long> maximumEvenSplit(long long finalSum) {
vector<long long> res;
if(finalSum%2==1) return res;
long long sum=0,i;
for(i=2;(sum+i+2)<=finalSum;i+=2)
{
sum+=i;
res.push_back(i);
}
if((finalSum-sum)<i)//退一位凑数
{
res.pop_back();
sum-=(i-2);
res.push_back(finalSum-sum);
}
else if((finalSum-sum)>i)//补数
res.push_back(finalSum-sum);
return res;
}
};