#C++ Day46 Basic Data Structure Chapter3  review-3  January 4 2026

8.差的绝对值为1的数对题目

2006. 差的绝对值为 K 的数对数目

已解答

简单

给你一个整数数组 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.数组中两元素的最大乘积

1464. 数组中两元素的最大乘积

已解答

简单

给你一个整数数组 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);

    }

};