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 ...
随机推荐
- Qt中跨进程Socket通信以及socket跨线程通信
一 QTcpServer 创建流程 创建套接字服务器 QTcpServer 对象, 通过 QTcpServer 对象设置监听,即:QTcpServer::listen() 基于 QTcpServer: ...
- Spring Boot应用启动
1.Eclipse 中启动Spring Boot应用 右键应用程序启动类, Run As Java Application 2.maven 命令: mvn spring-boot:run 在应用程序启 ...
- 【文献阅读】Automatic berthing for an underactuated unmanned surface vehicle: A real-time motion planning approach
(1)文章工作 This paper presents Extended Dynamic Window Approach (EDWA) for the automatic berthing of an ...
- [.Net] 【笔记】基于.NET平台常用的框架整理(转载,侵删)
分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度. Redis:是一个高性能的K ...
- GuiLite 学习笔记(一) Mainloop与ViewTree
以GuiLiteSamples中的HelloSlide 为例,剖析一下GuiLite的设计思路和刷新机制: 首先是main.cpp; 可以分成3部分: 1.根据fb mode拿到对应的phy_fb, ...
- 数据库可视化---grafana的简单使用
简介 grafana可以连接各种数据源, 并通过给定的SQL语句做数据的定时统计和web大屏展示,也可以对外提供API进行展示, 类似这样 内含多种不同类型图表, 可以涵盖很多种监控需求, 报表可视化 ...
- 解决pycharm中cv2报错问题,anaconda安装opencv
写在前面的话:cv2 报错是因为没安装opencv安装包所导致,并且在pycharm终端不可使用pip install cv2 进行安装! 如何解决cv2报错: 首先,值得注意的是在pycharm中, ...
- Android NDK build vsomeip3
Build Boost for Android https://github.com/moritz-wundke/Boost-for-Android set the NDK_ROOT environm ...
- Java-面向对象进阶 方法继承、重写
1.继承 子类继承父类后自动拥有父类非私有的属性和方法 Java中,一个父类可以被多个子类继承,一个子类只能继承一个父类 除了继承父类的属性和方法外,子类还拥有自己特有的属性和方法 如果子类的方法与父 ...
- SQL SERVER 多表联合修改
sql server中有时候会用到多表联合修改,下面是简单的多表修改的例子 UPDATE a SET a.a1 = b.b1 , a.a2 = b.b2 FROM A a, B b WHERE a.a ...