c++11 - c++ map.count 找到一个不存在的数字
问题描述
给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。
您可能会假设每个输入都只有一个解决方案,并且您可能不会两次使用相同的元素。
我曾尝试在 C++ 中使用 map,但是,它在 dict 中找到 542-863=-321,太奇怪了。
#include <iostream>
#include <map>
#include <vector>
using namespace std;
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> result;
int len=nums.size();
if(len==0){
return result;
}
map<int, int> dict;
map<int, int>::iterator iter;
for(int i=0; i<len;i++){
dict[nums[i]]=i;
int ss=target-nums[i];
cout<<ss<<" ";
int tag=dict.count(ss);
cout<<tag<<"tag"<<endl;
if(dict[target-nums[i]]!=i && tag!=0){
result.push_back(i);
result.push_back(dict[target-nums[i]]);
break;
}
}
cout<<result[0]<<result[1]<<endl;
return result;
}
int main(){
int a[]={230,863,916,585,981,404,316,785,88,12,70,435,384,778,887,755,740,337,86,92,325,422,815,650,920,125,277,336,221,847,168,23,677,61,400,136,874,363,394,199,863,997,794,587,124,321,212,957,764,173,314,422,927,783,930,282,306,506,44,926,691,568,68,730,933,737,531,180,414,751,28,546,60,371,493,370,527,387,43,541,13,457,328,227,652,365,430,803,59,858,538,427,583,368,375,173,809,896,370,789};
cout<<sizeof(a)/sizeof(a[0])<<endl;
vector<int> nums(a, a+100);
twoSum(nums, 542);
}
输出 [40,0]
期待 [28,45]
解决方案
好的,我明白了,既然我有dict[target-nums[i]] != i
,它就被执行了,所以存在一个 dict for target-nums[i]
,所以 count 可以找到它!
推荐阅读
- c++ - 将 JSON 数组转换为 QByteArray
- javascript - MongoDB比较日期不一致的工作
- javascript - Parseint – 用 e+ 截断
- flextable - 使用 rdcomclient 在 Outlook 中嵌入 flextable
- python - 建议图像文件的新名称并使用 PIL img.save() 保存
- javascript - 如何清除超时以便我可以重新使用该功能?
- android - Kivy 应用程序无法在 Android 上运行
- reactjs - 在 React 中使用 Web3 和 Metamask
- html - 如何在 html 中将 Angular routerLink 显示为纯文本?
- javascript - 反应:未捕获(承诺)错误:请求失败,状态码为 400