LeetCode刷题
新白娘子玩传奇
这个作者很懒,什么都没留下…
展开
-
数据结构之——跳表实现增删查
我们知道链表在插入删除很快,但是查找很慢,单链表查询某个数据的时间复杂度为O(n)。而今天讲的跳表具有快速插入、删除和查找的操作。 首先,对于一个有序的单链表,如果我们想要查找其中的某个数据,一般是从头到尾遍历链表。这种查找的效率很低。 为了提高查找的效率,我们在原始链表的基础上建立一级“索引”,也就是说在每两个结点取一个结点到上一级结点,抽出来的那一级我们叫它“索引”或者“索引层” 如上图,加入我们要查找16,我们可以现在索引层遍历,当遍历到13的结点时,发现下一个结点是17,那么查找...原创 2020-06-14 20:34:36 · 1341 阅读 · 4 评论 -
最接近目标数的三数之和
给定一个包括n 个整数的数组nums和 一个目标值target。找出nums中的三个整数,使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。 本题只需要对上一题求三数之和进行少许的修改即可。 思路:仍采用双指针的思路,只不过需要记录每次移动过程中出现的最近的值 #include<vector> #include<algorithm> using namespace std; class Solution { public: in...原创 2020-06-12 23:34:55 · 426 阅读 · 0 评论 -
三数之和
给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例: 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ] 思路: 排序 + 双指针 本题的难点在于如何去除重复解。 算法流程: 特判,对于数组长度 nn,如果数组为 nullnull...原创 2020-06-07 17:14:03 · 273 阅读 · 0 评论 -
两数之和
给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 标签:哈希映射 这道题本身如果通过暴力遍历的话也是很容易解决的,时间复杂度在 O(n2) 由于哈希查找的时间复杂度为 O(1),所以可以利用哈希容器 map 降低时间复杂度 遍历数组 nums,i 为当前下标,每个值都判断map中是否存在 target-nums[i] 的 key 值 如果存在则找到了两个值...原创 2020-06-04 00:05:39 · 125 阅读 · 0 评论 -
两数之和之输入有序数组
解题思路: 使用双指针,一个指针指向值较小的元素,一个指针指向值较大的元素。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。 如果两个指针指向元素的和 sum == targetsum==target,那么得到要求的结果; 如果 sum > targetsum>target,移动较大的元素,使 sumsum 变小一些; 如果 sum < targetsum<target,移动较小的元素,使 sumsum 变大一些。 数组中的元素最多遍历一次,时间复杂度为 O(N).原创 2020-06-03 23:52:46 · 171 阅读 · 0 评论