差的绝对值为 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
这题也过于简单了吧,虽然好方法难想,但是暴力解的方法非常好想。
代码
int countKDifference(vector<int>& nums, int k) {
int res = 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){
res++;
}
}
}
return res;
}
虽然也看了官方的答案,但是没有看懂,但是学到了unordered_map这个东西。
由于unordered_map不允许存储具有重复键的元素,因此count()函数本质上检查unordered_map中是否存在具有给定键的元素。如果Map中存在具有给定键的值,则此函数返回1,否则返回0。
unordered_map<int,char> example = {{1,'a'},{2,'b'}};
//查找的方法
auto search = example.find(2);
if (search != example.end()) {
std::cout << "Found " << search->first << " " << search->second << '\n';
} else {
std::cout << "Not found\n";
}
//遍历的方法
//方法一
for( auto& a : map)
{
char key= a.first;
int value= a.second;
}
//方法二
for (auto it = map.begin(); it != map.end(); it++)
{
char key = it->first;
int value = it->second;
}
就这样吧,鉴于这道题简单些,今天应该还会再做一道。
一个集坚强与自信于一身的菇凉。