// Given nums = [2, 7, 11, 15], target = 9,

// Because nums[0] + nums[1] = 2 + 7 = 9,
// return [0, 1]. #include <iostream>
#include <vector> int GetIndexByValue(const std::vector<int> &inArr, int value, int startIndex) {
for (int i = startIndex; i < inArr.size(); ++i) {
if (value == inArr[i]) {
return i;
}
} return -1;
} std::vector<int> GetIndicesOf2Addons(const std::vector<int> &inArr, int target) {
for (int i = 0; i < inArr.size(); ++i) {
int _2ndAddon = target - inArr[i];
int indexOf2ndAddon = GetIndexByValue(inArr, _2ndAddon, i + 1);
if (indexOf2ndAddon < 0) {
std::cout << "Failed to find: " << _2ndAddon << "\n";
continue;
} return std::vector<int> {i, indexOf2ndAddon};
} return std::vector<int>(0);
} int main(int argc, char const *argv[]) {
std::vector<int> nums {
2, 3, 11, 15, -2
};
int target = 4; std::vector<int> result = GetIndicesOf2Addons(nums, target); if (result.empty()) {
std::cout << "Failed.\n";
return -1;
} for (auto i: result) {
std::cout << i << "\t";
}
std::cout << "\n"; return 0;
} // g++ two_sum.cpp -std=c++11 && ./a.out

参考,https://cloud.tencent.com/developer/article/1010478,使用hash_map或者unordered_map实现:

// Given nums = [2, 7, 11, 15], target = 9,

// Because nums[0] + nums[1] = 2 + 7 = 9,
// return [0, 1]. #include <iostream>
#include <vector>
#include <unordered_map> class Solution {
public:
std::vector<int> twoSum(std::vector<int> &numbers, int target) {
// Key is the number and value is its index in the std::vector.
std::unordered_map<int, int> hash; for (int i = 0; i < numbers.size(); i++) {
int numberToFind = target - numbers[i];
// if numberToFind is found in map, return them
if (hash.find(numberToFind) != hash.end()) {
return std::vector<int> {i, hash[numberToFind]};
} // number was not found. Put it in the map.
hash[numbers[i]] = i;
} return std::vector<int>(0);
}
}; int main(int argc, char const *argv[]) {
std::vector<int> nums {
2, 3, 11, 15
};
int target = 0; Solution sol;
std::vector<int> res = sol.twoSum(nums, target);
if (res.empty()) {
std::cout << "Failed.\n";
return -1;
} for (auto i: res) {
std::cout << i << "\t";
}
std::cout << "\n"; return 0;
} // g++ two_sum.cpp -std=c++11 && ./a.out

算法本身遍历一次,花费了 O(n) 的时间复杂度,遍历过程中的 find() 方法本身花费 O(log n),所以该算法总时间复杂度为 O(nlog n)。

Two Sum:给出一个整数数组,返回两个数的下标值,令其和等于一个指定的目标值 #Leetcode的更多相关文章

  1. python练习:实现一个整数数组里面两个数之和为183的所有整数对

    l1 = [183,0,1,2,-184,367] num = [] for i in range (0,len(l1)): for l in range (i+1,len(l1)): if l1[i ...

  2. 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)

    题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...

  3. 作业帮:给定一个整数数组,找出其中两个数相加等于目标值(去重set)

    题目描述 给定一个整数数组,找出其中两个数相加等于目标值 输入 [1,3,5,7,9,11] 10 输出 1,9 3,7 代码: import java.util.HashMap; import ja ...

  4. 刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数

    今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的 ...

  5. LeetCode竞赛题:K 次取反后最大化的数组和(给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。)

    给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次.(我们可以多次选择同一个索引 i.) 以这种方式修改数组后 ...

  6. 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。

    描述 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 0 到 n-1. ...

  7. 给定一个整数数组 nums 和一个目标值 target,求nums和为target的两个数的下表

    这个是来自力扣上的一道c++算法题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案 ...

  8. 【编程题目】一个整数数组,长度为 n,将其分为 m 份,使各份的和相等,求 m 的最大值★★ (自己没有做出来!!)

    45.雅虎(运算.矩阵): 2.一个整数数组,长度为 n,将其分为 m 份,使各份的和相等,求 m 的最大值 比如{3,2,4,3,6} 可以分成 {3,2,4,3,6} m=1; {3,6}{2,4 ...

  9. c语言经典算法——查找一个整数数组中第二大数

    题目: 实现一个函数,查找一个整数数组中第二大数. 算法思想: 设置两个变量max1和max2,用来保存最大数和第二大数,然后将数组剩余的数依次与这两个数比较,如果这个数a比max1大,则先将max1 ...

  10. 在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边。

    //在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边. // 例如: 当输入a = {8,4,1,6,7,4,9,6,4}, // a = {1,7,9,8,4,6,4 ...

随机推荐

  1. system verilog与C语言的接口(包含使用方法以及实例)

    资料来源 (1) sv绿皮书; (2) vcs user guide; (3) https://www.cnblogs.com/studyforever/p/5169243.html (4) syst ...

  2. Maven3.6.1 (转载大佬文章)

    (30条消息) Maven3.6.1安装及配置_浅若清风过的博客-CSDN博客 1.下载https://archive.apache.org/dist/maven/maven-3/3.6.1/bina ...

  3. js原型,继承

    javascript是为了成为轻量级的语言而开发的.开发者并没有选择像其他面向对象的语言一样,定义类(class),而是使用了protopype实现继承. 每一个函数在创建时,都会创建它的Protot ...

  4. PowerShell学习笔记三_使用PS操作远程服务器

    PowerShell远程操作服务器 参考: https://www.cnblogs.com/sparkdev/p/7200004.html 补充: 1. 服务器上,要被Powershell远程操作,是 ...

  5. git如何把master合并到自己分支

    1.切换到主分支 git checkout master 2.使用git pull把master代码拉到本地 git pull 3.切换到自己的分支-->(XXX) git checkout X ...

  6. idea因时区连不上msyql8问题

    转载自https://www.cnblogs.com/lakei/p/11303174.html Connection to api@localhost failed. [08001] Could n ...

  7. HttpClient详细使用示例(转)

    https://blog.csdn.net/justry_deng/article/details/81042379

  8. VUE学习-生命周期

    生命周期 函数 描述 beforeCreate 在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用. created 在实例创建完成后被立即 ...

  9. oracle常用知识随笔

    1.创建表空间及用户赋权 create tablespace spaceone datafile '/dev/spaceone'size 80mextent management localsegme ...

  10. 如何修改Mac文件默认打开方式?

    熟悉Mac电脑的用户都知道,在 OS X 中,Finder 存储的文件总会以指定的某个默认应用程序打开,比如图片类型的文件默认以「预览」打开.但由于经常需要使用图片编辑工具 PS打开图片类型的文件,每 ...