当前位置: 首页 > news >正文

【剑指offer】题解:和为S的两个数字

题目描述

输入一个数组和一个数字 s,在数组中查找两个数,使得它们的和正好是 s。
如果有多对数字的和等于 s,输出任意一对即可。
你可以认为每组输入中都至少含有一组满足条件的输出。

数据范围
数组长度 [1,1002]

样例
样例
输入:[1,2,3,4] , sum=7输出:[3,4]

1.(暴力)O(n^2)


双层for循环遍历即可。注意控制边界情况
时间复杂度 O(n)

//c++代码
class Solution {
public:vector<int> findNumbersWithSum(vector<int>& nums, int target) {for(int i=0;i<nums.size();i++){for(int j=i+1;j<nums.size();j++){if(nums[i] + nums[j] == target){return {nums[i],nums[j]};}}}return {-1,-1};}
};

2.(哈希) O(n)

        由于我们只需要找到 a + b == target 的一对,所以我们先遍历,如果当前的数 a 和 target 满足哈希表中的某数b,使得 target - a == b ,那么我们直接返回 {a,b} 即可。否则我们在哈希表中添加 a。时间复杂度 O(n)

//C++ 代码
class Solution {
public:vector<int> findNumbersWithSum(vector<int>& nums, int target) {unordered_map<int,int> hash;for(auto x : nums){if(hash[target-x] != 0) return {x,target-x};else hash[x]++;}return {-1,-1};}
};


http://www.mrgr.cn/news/23174.html

相关文章:

  • 【网络安全 | 渗透工具-目录FUZZ】ffuf安装使用详细教程
  • 【附源码】Python :斐波那契数列(10种方法计算第n项)
  • mysql——关于表的增删改查(CRUD)
  • 【880高数】高等数学一刷错题整理
  • 华为-2022-测试面试题
  • 概率论原理精解【12】
  • 机器人领域超重量奖项TRO傅京孙最佳论文奖汇总【上】
  • 每日一题,力扣leetcode Hot100之206反转链表
  • 【C++】C++入门基础,详细介绍命名空间,缺省参数,函数重载,引用,内联函数等
  • 11大排序的原理讲解和Python源码剖析
  • 【Kubernetes知识点问答题】监控与升级 / ETCD 备份与恢复
  • 田纳西州橡树岭全球最快的超级计算机名为Frontier
  • 【LabVIEW学习篇 - 18】:人机界面交互设计02
  • Lua协同程序Coroutine
  • HTTrack
  • 点餐小程序实战教程04变量定义和初始化
  • AI工具(不断更新)
  • OJ2219左移右移(链表)——蓝桥杯2022年国赛
  • 期货量化-群体优化算法:混合蛙跳算法(SFL)
  • 计算机毕业设计Pyhive+Spark招聘可视化 职位薪资预测 招聘推荐系统 招聘大数据 招聘爬虫 大数据毕业设计 Hadoop Scrapy