目录

两数之和_牛客题霸_牛客网

三数之和_牛客题霸_牛客网


两数之和_牛客题霸_牛客网

给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。

(注:返回的数组下标从1开始算起,保证target一定可以由数组里面2个数字相加得到)

数据范围:2≤len(numbers)≤1052≤len(numbers)≤105,−10≤numbersi≤109−10≤numbersi​≤109,0≤target≤1090≤target≤109

要求:空间复杂度 O(n)O(n),时间复杂度 O(nlogn)O(nlogn)

【解法一】枚举遍历 无法通过


class Solution {
public:vector<int> twoSum(vector<int>& numbers, int target) {// write code herevector<int> res;int n = numbers.size();for(int i = 0; i < n; i++){for(int j = i+1; j < n; j++){if(numbers[i]+numbers[j] == target){res.push_back(i+1);res.push_back(j+1);return res;}}}return res;}
};

【解法二】哈希存储

这道题让我对哈希表又有了新的认知,之前每次都是用hash来进行一个数出现的次数,于是会写出这样的  mp[arr[i]]++  ++表示这个数出现的次数加一,然而这道题把数与其在number中所对应的下标对应着存入map中。然后在后续遍历中,如果target-number[i]在map中存在可以直接返回我所需要的下标值。

时间复杂度O(N)  只需遍历一次数组,每次在哈希表中查找的时间复杂度为O(1)

空间复杂度为O(N) 创建map

class Solution {
public:vector<int> twoSum(vector<int>& numbers, int target) {// write code herevector<int> res;map<int, int> mp;int n = numbers.size();for(int i = 0; i < n; i++){int temp = target - numbers[i];if(mp.find(temp) == mp.end())mp[numbers[i]] = i;else{res.push_back(mp[temp]+1);res.push_back(i+1);break;}}return res;}
};

三数之和_牛客题霸_牛客网

给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。

数据范围:0≤n≤10000≤n≤1000,数组中各个元素值满足 ∣val∣≤100∣val∣≤100

空间复杂度:O(n2)O(n2),时间复杂度 O(n2)O(n2)

注意:

  1. 三元组(a、b、c)中的元素必须按非降序排列。(即a≤b≤c)
  2. 解集中不能包含重复的三元组。

 将三数求和转化为二数求和来达到解题的目的,使用set接口进行去重。

class Solution {
public:vector<vector<int>> TwoSum(vector<int> num, int target, int begin){int n = num.size();vector<vector<int>> res;    // 用来返回结果数组for(int i = begin; i < n; i++){int _target = target-num[i];    // 将二数求和转化为找一个数if(find(num.begin()+i+1,num.end(),_target) != num.end()){// 利用#include<algorithm> 中find接口来进行查找// 找不到就返回num的end()vector<int> temp;temp.push_back(num[i]);   //如果找到了就把第二个数与第三个数都放入temp中      temp.push_back(_target);    res.push_back(temp);      //完成一次结果并放入res中,继续后续其他结果的查找}}return res;}vector<vector<int> > threeSum(vector<int> &num) {set<vector<int>> res;   // 用来去重的set容器vector<vector<int>> Res;    // 用来返回结果int n = num.size();if(n<3)return Res;  // 元素个数小于三个返回空sort(num.begin(), num.end());   // 进行一次排序整理for(int i = 0; i < n; i++){int target = 0-num[i];      // 把三数之和转化为俩数之和vector<vector<int>> temp = TwoSum(num, target, i+1);    // 多传一个下标参数 防止重复if(!temp.empty()){for(auto e : temp){e.insert(e.begin(), num[i]); // 在每组返回的数组最前方插入第一个数res.insert(res.end(), e);   // 将三个数的数组放入到set容器中进行去重}}}for(auto e : res)Res.push_back(e);   // 将set转移至Res中。return Res;}
};

基础数学(二)两数之和 三数之和相关推荐

  1. 我理解的算法 - 三数之和及两数、三数之和扩展题

    我理解的算法 - 三数之和及两数.三数之和扩展题 LeetCode 15.三数之和 扩展 三数之和变种题 两数之和变种题 LeetCode 15.三数之和 这道题的题目大家自行查看:链接在这 ,题目和 ...

  2. 《漫画算法2》源码整理-6 两数之和 三数之和

    两数之和 import java.util.*;public class TwoSum {public static List<List<Integer>> twoSum(in ...

  3. 两数、三数、四数之和相关题目(Leetcode题解-Python语言)

    作为 Leetcode 的第一题,两数之和自然是知名度最高的,从两数之和出发也有不少的衍生题目,下面就让我们好好地解决它们. 1. 两数之和 class Solution:def twoSum(sel ...

  4. 【LeetCode】两数之和、三数之和、四数之和系列

    文章目录 两数之和★ 三数之和★★ 四数之和★★ 四数相加Ⅱ★★ 最接近的三数之和★★ 此篇文章总结下力扣中的两数之和.三数之和.四数之和及一系列求数组中满足达到目标值的元组个数的问题,仔细阅读下面的 ...

  5. c++ 快排优化(三数取中法)

    快排优化(三数取中法) 文章目录 快排优化(三数取中法) 前言 一.三数取中法 二.递归思想 三.程序实现过程(代码) 1.取基准数(三数取中) 2.快速排序(递归) 总结 前言 作为刚刚入门c和c+ ...

  6. 双指针解决力扣两/三数之和问题

    双指针解决力扣两/三数之和问题 文章目录 双指针解决力扣两/三数之和问题 一.问题描述 二.分析 1.暴力 2.排序+双指针法 3.hash法 三.问题描述 四.分析 方法一:排序 + 双指针 五.代 ...

  7. 两数之和、三数之和、四数之和、K数之和

    两数之和.三数之和.四数之和和K数之和是最近听室友提起的几道有意思的基础题,可以说是把双指针运用的淋漓尽致.(K数之和其实是一个动态规划的题,此处因为满足*数之和的的结构,放在一起对比提一下). 1. ...

  8. 双指针之两数之和,三数之和,N数之和系列

    两数之和 暴力法,时间复杂度O(n*n),空间复杂度O(1) class Solution(object):def twoSum(self, nums, target):""&qu ...

  9. 数组计算两数之和,三数之和,四数之和

    这种计算几个数据之和的题目, 一般分为 在同一个数组中计算几个数之和等于某一个值. 还有一种是给几个数组,每个数组中取一个数据,让你算几个数之和等于某一个值. 一般情况下,第二中的难度会更大,因为去重 ...

最新文章

  1. 【python】Python中给List添加元素的4种方法分享
  2. 在客户端为UltraWebGrid增加行
  3. python左移右移位运算_Python这些位运算的妙用,绝对让你大开眼界
  4. 排查 .NET开发的工厂MES系统 内存泄漏分析
  5. php 导出txt 缩进,indent - 缩进文本
  6. 小米手环4今日发布:除了大屏彩显 你期待的全都有了
  7. ORCALE SYNONYM SEQUENCE
  8. [BZOJ 3668UOJ #2][Noi2014]起床困难综合症(贪心)
  9. Atitit.线程 死锁 跑飞 的检测与自动解除 与手动解除死锁 java c# .net php javascript.
  10. Android 反编译指南
  11. 医疗卫生行业中的领域模型
  12. C语言实现图的关键路径算法
  13. 上海财经应用统计考python_20上财应用统计415分经验帖(初试第一)
  14. 什么是电容式传感器?其工作原理是怎样的?
  15. 个人网页LOGO设计(作业)
  16. Word 公式排版(使用制表符)
  17. SOHUDBA/SOHU-DBProxy: 搜狐公司强大的数据库中间件
  18. 职场礼仪之西装十大禁忌
  19. Html入门学习总结
  20. 痞子衡嵌入式:串口调试工具Jays-PyCOM诞生记(6)- 打包发布(PyInstaller3.3.1)

热门文章

  1. <Zhuuu_ZZ>Linux远程连接
  2. html 播放f4v,配置 nginx 支持 f4v视频格式播放
  3. 不负春光 封控在家1个月 CCBA到手
  4. 单片机实现LED呼吸灯功能
  5. fmcw matlab仿真,干货 | 利用MATLAB实现FMCW雷达的角度估计
  6. python中如何遍历26个英文字母?三种办法
  7. i8042 键盘控制器-------详细介绍
  8. Tomcat应用部署及详解
  9. 【RSVP-BCI基本知识点】
  10. 按姓名删除学生信息C语言无指针,学生信息管理系统修改