zl程序教程

您现在的位置是:首页 >  其它

当前栏目

两数之和(二十二)

两数 二十二
2023-09-14 09:16:11 时间

题目:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。 

例如:遍历数组a[1,2,3,4,5,6,7,8,9,10]中两数之和等于10的,所有数的索引.

//遍历数组a[1,2,3,4,5,6,7,8,9,10]中两数之和等于10的,所有数的索引.
#include <iostream>
#include <vector>
#include <map>
#include <unordered_map>
using namespace std;

void sum(vector<int>& num, vector<int>& result, int target){
	for(int i = 0; i < num.size(); i++){
		for(int j = i+1; j < num.size(); j++){
			if(num[i] + num[j] == target && i != j){
				//printf("i = %d, j = %d\n",i,j);
				result.push_back(i);
				result.push_back(j);
			}
		}
	}
}

void sum1(vector<int>& num, map<int, int>& result, int target){
	for(int i = 0; i < num.size(); i++){
		for(int j = i+1; j < num.size(); j++){
			if(num[i] + num[j] == target && i != j){
				//printf("i = %d, j = %d\n",i,j);
				result.insert(make_pair(i, j));
			}
		}
	}
}

void two_sum(vector<int>& num, unordered_map<int, int>& result, int target){
	for(int i = 0; i < num.size(); i++){
		for(int j = i+1; j < num.size(); j++){
			if(num[i] + num[j] == target && i != j){
				//printf("i = %d, j = %d\n",i,j);
				result.insert(make_pair(i, j));
			}
		}
	}
}

int main(){
	vector<int> num = {1,2,3,4,5,6,7,8,9,10};
	vector<int> vec_result;
	map<int, int> map_result;
	int target = 10;

	cout << "size = " << num.size()<< endl;
	
#if 1
	//1.vector way
	sum(num, vec_result, target);

	//
	// while(vec_result.empty() != true){
	// 	int i = vec_result.back();
	// 	cout << i << " ";
	// 	vec_result.pop_back();
	// }

	//
	for(auto i : vec_result)
		cout << i << " ";
	
		
#else
	//2.map way: red and black tree, have sort.
	map<int,int>::iterator it;
	//sum1(num, map_result, target);	
	//
	// for(it = map_result.begin(); it != map_result.end(); it++)
	// 	cout << it->first << " : " << it->second << endl;

	//auto
	// for(auto i : map_result)
	// 	cout << i.first << " : " << i.second << endl;

	//3.unordered_map way: hashmap, Not sort.
	unordered_map<int, int> un_map_res;	
	two_sum(num, un_map_res, target);
	for(auto i : map_result)
		cout << i.first << " : " << i.second << endl; 
	
#endif
}