Two Sum:给出一个整数数组,返回两个数的下标值,令其和等于一个指定的目标值 #Leetcode
// 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的更多相关文章
- 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 ...
- 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)
题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...
- 作业帮:给定一个整数数组,找出其中两个数相加等于目标值(去重set)
题目描述 给定一个整数数组,找出其中两个数相加等于目标值 输入 [1,3,5,7,9,11] 10 输出 1,9 3,7 代码: import java.util.HashMap; import ja ...
- 刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数
今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的 ...
- LeetCode竞赛题:K 次取反后最大化的数组和(给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。)
给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次.(我们可以多次选择同一个索引 i.) 以这种方式修改数组后 ...
- 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。
描述 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 0 到 n-1. ...
- 给定一个整数数组 nums 和一个目标值 target,求nums和为target的两个数的下表
这个是来自力扣上的一道c++算法题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案 ...
- 【编程题目】一个整数数组,长度为 n,将其分为 m 份,使各份的和相等,求 m 的最大值★★ (自己没有做出来!!)
45.雅虎(运算.矩阵): 2.一个整数数组,长度为 n,将其分为 m 份,使各份的和相等,求 m 的最大值 比如{3,2,4,3,6} 可以分成 {3,2,4,3,6} m=1; {3,6}{2,4 ...
- c语言经典算法——查找一个整数数组中第二大数
题目: 实现一个函数,查找一个整数数组中第二大数. 算法思想: 设置两个变量max1和max2,用来保存最大数和第二大数,然后将数组剩余的数依次与这两个数比较,如果这个数a比max1大,则先将max1 ...
- 在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边。
//在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边. // 例如: 当输入a = {8,4,1,6,7,4,9,6,4}, // a = {1,7,9,8,4,6,4 ...
随机推荐
- 【SHELL】记一个没啥用的脚本
因为最近Terraria更新了嘛,然后又想开服了,但是捏,我原来的UbuntuServer系统因为没有界面,而且我新购置了一台3D打印机,需要软件界面去操作,所以原先的系统就格了,重装win10,然后 ...
- vue请求插件axios响应拦截302
axios.interceptors.response.use(function (response) { return response;}, function (error) { // 对请求错误 ...
- jmeter中监听器及测试结果分析
- 把userId:12323 直接拿到12323
JSONObject jsonObject1 = JSONObject.parseObject(mqttMessage); MessageVo messageVo = JSONObject.toJa ...
- 金蝶K3无法查看关联信息
场景: 某个用户点击采购订单界面--关联信息,界面显示正在加载,但是无法显示所有关联单据. 步骤: 1. 在其他电脑登录存在同样问题. 2. 其他模块可以正常显示 3. 删除该用户t_UserProf ...
- ONOS-2.2在IntelliJ IDEA进入调试模式
转载https://blog.csdn.net/fsdgfsf/article/details/90369709 在ONOS2.2中使用IDEA打开并支持断点调试 1.让环境变量生效 . /etc/p ...
- 【C++复习】第九章 模板与群体数据(1)
1.例:求绝对值函数的模板 函数重载方便了函数的使用者,开发者还是要写两个函数 模板是用来生成函数的东西 编译器通过推导生成函数: 2.函数模板定义语法 从例题入手,别上来就扣语法 3.例9-1 函数 ...
- JDBC之ResultSet和元数据
ResultSet 从名字上就可以看到是结果集,表示的是查询出来的结果集. JDBC用ResultSet来封装结果集,查询结果表的对象. 查询结果分为两种情况: 单值 单个结果,比如说SQL如下: s ...
- ASP.NET WebAPI 单元测试-UnitTest
xUnit.Net
- Activiti5.22.0扩展支持达梦数据库
前言 目前国内部分公司做的项目要求去ioe使用国产的替代方案.数据从异构数据库中迁移到达梦,应用中使用Activiti工作流在替换了数据库驱动后启动过程报错如下: nested exception i ...