欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Leetcode1 两数之和(C++)

程序员文章站 2022-07-14 17:29:02
...

题目描述:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

class Solution
{
public:
	vector<int> twoSum(vector<int>& nums, int target)          //返回类型为vector的int型的函数
	{
		unordered_map<int, int> mp;

		for (int i = 0; i < nums.size() :i++)
		{
			auto it = mp.find(target - nums[i]);

			if (it != mp.end())
			{
				return { it->second,i };

			}
			mp[nums[i]] = i;

		}
		return {};
	}
};

补充1:
在c++中,vector是一个十分有用的容器。
作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。

1 、基本操作
(1)头文件#include<vector>.
(2)创建vector对象,vector<int> vec;
(3)尾部插入数字:vec.push_back(a);
(4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。
(6)插入元素:    vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;
(7)删除元素:    vec.erase(vec.begin()+2);删除第3个元素
vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始
(8)向量大小:vec.size();
(9)清空:vec.clear();
实例:vector<int>test;
//建立一个vector,int为数组元素的数据类型,test为动态数组名
简单的使用方法如下:
vector<int>test;//建立一个vector
test.push_back(1);
test.push_back(2);//把1和2压入vector,这样test[0]就是1,test[1]就是2

补充2:

若有unordered_map <int, int> mp;查找x是否在map中
    方法1:  若存在  mp.find(x)!=mp.end()
    方法2:  若存在  mp.count(x)!=0
it->second的用法:

MapForSort[99] = 1000000;
it->first就是下标,即99
it->second是值,即1000000
#include<iostream>
#include<map>
#include<iterator>
using namespace std;
 
int main()
{
map<string,int> maps;
maps.insert(pair<string,int>("1",10));
maps.insert(pair<string,int>("2",50));
maps.insert(pair<string,int>("3",70));
for(map<string,int>::iterator it=maps.begin();it!=maps.end();++it)
{        
cout << it->second << endl;
}
return 0;
}
 
 
Output:
10
50
70