| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 两数之和、三数之和、四数之和还不会写?看完此篇轻松掌握 -> 正文阅读 |
|
[数据结构与算法]两数之和、三数之和、四数之和还不会写?看完此篇轻松掌握 |
一、两数之和????????给定一个整数数组 nums?和一个整数目标值 target,请你在该数组中找出和为目标值 target??的那两个整数,并返回它们的数组下标。 ????????示例 1:输入:nums = [2,7,11,15], target = 9????????输出:[0,1]????????解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 ? ? ? ? 解题思路: ? ? ? ? 此题使用哈希法,对数组进行一次遍历,如果哈希表中能查询到 target-nums[i],代表找到了和为target的两数,如果不能查询到 target-nums[i],则向哈希表中插入nums[i],确保后面的查找。???????? ? ? ? ? 注意此题不可用双指针解法,因为 sort 函数会把下标打乱。
二、三数之和????????给你一个包含 n 个整数的数组?nums,判断?nums?中是否存在三个元素 a,b,c ,使得?a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 ????????示例 1:输入:nums = [-1,0,1,2,-1,-4]????????输出:[[-1,-1,2],[-1,0,1]] ????????解题思路: ????????此题有两种解法:哈希解法和双指针法。 ? ? ? ? 哈希解法:通过两层 for 循环确定 a 和 b, 得出 target=-nums[i]-nums[j],剩余步骤类似两数之和。不过此处需要注意去重,步骤较为复杂,实际解答时更倾向于双指针法。
?????????双指针法:运用for循环,遍历数组固定第一个数a ,将问题转化为求两数之和。双指针在 nums[i] 后面的区间中寻找和为 0-nums[i] 的另外两个数,left 指针指向 i+1,right 指针指向 size-1, 不断缩小区间 [left,right],找到 a 确定时满足的所有组合。
三、四数之和????????给你一个由 n 个整数组成的数组?nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组?[nums[a], nums[b], nums[c], nums[d]]?(若两个四元组元素一一对应,则认为两个四元组重复):0 <= a, b, c, d?< n, a、b、c 和 d 互不相同,nums[a] + nums[b] + nums[c] + nums[d] == target ????????示例 1: 输入:nums = [1,0,-1,0,-2,2], target = 0 ???????输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]] ????????解题思路: ? ? ? ? 与三数之和类似,只是多一层for循环。
四、四数相加????????给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:0 <= i, j, k, l < n,nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0 ????????解题思路: ????????此题与上述题目不太一样,是分别从四个数组里面选一个数,但也是使用哈希法,首先,可以先在 nums1 和 nums2 里面选出第一个数和第二个数,用两个 for 循环进行枚举遍历, 并将这两个数的和插入哈希表。 ? ? ? ? 再在 nums3?和 nums4?里面枚举遍历选出第三个数和第四个数,查询哈希表里是否有键值等于 target =-nums3[i]-nums4[j],若找到有,则总次数加上此 target 在哈希表中记录的次数,若没找到,则继续进行下一次枚举。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 18:26:41- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |