1.1 两数和
方法一 直接暴力遍历
- 数组太麻烦了 直接使用vector
下面展示一些 内联代码片
。
//note: 暴力方法
int* sumTwo(vector<int> arr, int target)
{
int* result = (int*)malloc(sizeof(int) * 2);
int temp = 0;
for (int i = 0; i < arr.size() - 1; i++)
{
temp = target - arr.at(i);
for (int j = i + 1; j < arr.size(); j++)
{
if (temp == arr.at(j))
{
result[0] = i;
result[1] = j;
return result;
}
}
}
//note:没找到 返回空指针也可
result[0] = 0;
result[1] = 0;
return result;
}
方法二
- 通过查表的方式
- 就是先好打标签,后面好查找。感觉就是为了以后好用,然后时间节省下来了
std::vector<int> sumTwo_map(vector<int> &arry, int target)
{
std::unordered_map <int, int> table; //note: 记录表
std::vector<int> result;
for (int i = 0; i < arry.size(); i++)
{
if (table.count(target - arry.at(i))) //note: 是否有这个元素
{
int second = table[target - arry.at(i)];
result = { i, second };
return result;
}
else
{
table.insert(unordered_map<int,int>::value_type(arry.at(i),i)); //记录
}
}
//note 没有找到 返回空也可
result = { 0,0 };
return result;
}
还有其他方法暂时没看了