8.差的绝对值为1的数对题目
已解答
简单
给你一个整数数组 nums 和一个整数 k ,请你返回数对 (i, j) 的数目,满足 i < j 且 |nums[i] – nums[j]| == k 。
|x| 的值定义为:
- 如果 x >= 0 ,那么值为 x 。
- 如果 x < 0 ,那么值为 -x 。
示例 1:
输入:nums = [1,2,2,1], k = 1
输出:4
解释:差的绝对值为 1 的数对为:
– [1,2,2,1]
– [1,2,2,1]
– [1,2,2,1]
– [1,2,2,1]
示例 2:
输入:nums = [1,3], k = 3
输出:0
解释:没有任何数对差的绝对值为 3 。
示例 3:
输入:nums = [3,2,1,5,4], k = 2
输出:3
解释:差的绝对值为 2 的数对为:
– [3,2,1,5,4]
– [3,2,1,5,4]
– [3,2,1,5,4]
提示:
- 1 <= nums.length <= 200
- 1 <= nums[i] <= 100
- 1 <= k <= 99
class Solution {
public:
int countKDifference(vector<int>& nums, int k) {
int ret=0;
for(int i=0;i<nums.size();i++){
for(int j=0;j<nums.size();j++){
if((nums[i] – nums[j] == k))
{
ret++;
}
}
}
return ret;
}
};
class Solution {
public:
int countKDifference(vector<int>& nums, int k) {
int ret=0;
for(int i=0;i<nums.size();i++){
for(int j=i+1;j<nums.size();j++){
if(abs(nums[i] – nums[j]) == k)
{
ret++;
}
}
}
return ret;
}
};
9.数组中两元素的最大乘积
已解答
简单
给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。
请你计算并返回该式的最大值。
示例 1:
输入:nums = [3,4,5,2]
输出:12
解释:如果选择下标 i=1 和 j=2(下标从 0 开始),则可以获得最大值,(nums[1]-1)*(nums[2]-1) = (4-1)*(5-1) = 3*4 = 12 。
示例 2:
输入:nums = [1,5,4,5]
输出:16
解释:选择下标 i=1 和 j=3(下标从 0 开始),则可以获得最大值 (5-1)*(5-1) = 16 。
示例 3:
输入:nums = [3,7]
输出:12
提示:
- 2 <= nums.length <= 500
- 1 <= nums[i] <= 10^3
class Solution {
public:
int maxProduct(vector<int>& nums) {
int ret=0,max=-10000000;
for(int i=0;i<nums.size();++i){
for(int j=i+1;j<nums.size();++j){
if((nums[i]-1)*(nums[j]-1)>max){
max = (nums[i]-1)*(nums[j]-1);
}
}
}
return max;
}
};
//抓壮丁 最大 和 次大
class Solution {
public:
int maxProduct(vector<int>& nums) {
int maxIdx = 0;
for(int i=1;i<nums.size();++i){
if(nums[i] > nums[maxIdx]){
maxIdx = i;//最大数下标
}
}
int subMaxIdx = -1;
for(int i=0;i<nums.size();++i){
if(i != maxIdx){ //第二个循环的i如果不等于最大下标
if(subMaxIdx == -1 || nums[i] > nums[subMaxIdx]){
subMaxIdx = i;//次大数下标
}
}
}
return (nums[maxIdx]-1) * (nums[subMaxIdx]-1);
}
};