leecode(1)Two Sum

本文介绍了一种解决两数之和问题的简单算法。给定一个整数数组及目标值,通过双层循环找到两个数,使得它们的和等于目标值,并返回这两个数的下标。示例输入为数组{12, 7, 76, 34, 22, 14, 18}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given an array of integers, find two numbers such that they add up to a specific target number.

The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.

You may assume that each input would have exactly one solution.

Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2

anser

#include <stdio.h>   
#include <iostream>
#include  <vector>
using namespace std;
// const int numCount=20;
// int numArray[numCount]={1,23,123,2,45,35,64,75,7,33,21,77,8,2,72,345,3245,55,28,34};
int index1=0,index2=0;
void twosum(std::vector<int> &nums,int target){
if (nums.size()<1)
{
return;
/* code */
}
  for (int i = 0; i < nums.size()-1; ++i)
  {
for (int j =i+1; j <  nums.size(); ++j){
if(nums[i]+nums[j]==target){
index1=i;
        index2=j;
}
/* code */
}
}
/* code */
}










int  main()
{
std::vector<int> vNum;
vNum.push_back(12);
vNum.push_back(7);
vNum.push_back(76);
vNum.push_back(34);
vNum.push_back(22);
vNum.push_back(14);
vNum.push_back(18);
twosum(vNum,21);
if (index2!=0)
{
cout<<"index1= "<<index1<<" ,index2= "<<index2;
/* code */
}
else{
cout<<"not exist!!!";
}


/* code */
return 0;
}

有直接使用库函数的,还不如自己编写一个。

就是两个循环。



### 关于LeetCode中的哈希表相关题目 在解决涉及查找、匹配或存储数据的问题时,哈希表是一种非常高效的工具。以下是几个常见的LeetCode问题及其解决方案,这些都利用了哈希表的概念。 #### 题目1:两数之和 (Two Sum) 这是一个经典的入门级哈希表应用问题。给定一个数组 `nums` 和目标值 `target`,找出两个数使得它们相加等于目标值并返回其索引。 ##### 解决方案 使用哈希表记录已经遍历过的数字以及对应的索引位置,从而可以在常量时间内判断当前数字的补数是否存在。 ```cpp #include <unordered_map> #include <vector> std::vector<int> twoSum(std::vector<int>& nums, int target) { std::unordered_map<int, int> hashTable; for(int i = 0; i < nums.size(); ++i){ int complement = target - nums[i]; if(hashTable.find(complement) != hashTable.end()){ return {hashTable[complement], i}; } hashTable[nums[i]] = i; } return {}; } ``` 此代码片段展示了如何通过一次循环完成任务[^1]。 #### 题目2:快乐数 (Happy Number) 虽然这道题主要考察的是数学逻辑,但是可以通过哈希表来检测循环以优化性能。 ##### 解决方案 创建一个集合用于跟踪已访问的中间结果,如果发现重复则说明进入无限循环;反之,则继续计算直到得到最终结果为1为止。 ```cpp bool isHappy(int n) { unordered_set<int> seenNumbers; while(n != 1 && !seenNumbers.count(n)){ seenNumbers.insert(n); int sum = 0; while(n > 0){ int digit = n % 10; sum += digit * digit; n /= 10; } n = sum; } return n == 1; } ``` 这里采用了无序集合作为辅助结构来避免冗余运算[^6]. #### 使用场景分析 对于何时应该考虑运用哈希技术解决问题,在遇到诸如检查某个项目是否存在于列表之中这类需求的时候尤为适用[^3]. 此外,当面临需要频繁执行插入/删除操作的数据管理场合下也十分有效. --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值