![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
数据结构与算法问题
DinDin1995
这个作者很懒,什么都没留下…
展开
-
LeetCode运行报错: reference binding to null pointer of type 'value_type'
在LeetCode做题的过程中,遇到"reference binding to null pointer of type ‘value_type’" 这个问题,现在对这个问题进行一下分析和总结。产生原因:1.对于一些stl和一些数据结构掌握不准确。2.忽视判断条件。错误种类:1.测试样例输入为非空数组情况:Runtime Error Message:reference binding to null pointer of type 'value_type'Last executed inpu转载 2020-05-13 11:11:02 · 402 阅读 · 0 评论 -
【C++、二分法】LeetCode744. 寻找比目标字母大的最小字母
寻找比目标字母大的最小字母给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。在比较时,字母是依序循环出现的。举个例子:如果目标字母 target = 'z' 并且字符列表为 letters = ['a', 'b'],则答案返回 'a'示例:输入:letters = ["c", "f", "j"]target = "a"输出: "c"输入:letters = ["c", "f".原创 2020-05-11 14:44:42 · 225 阅读 · 0 评论 -
深度优先和广度优先算法
1 深度优先搜索算法(DFS)1.1 DFS解决问题解决连通性的问题,即给定两个点,一个起始点(或起始状态),一个终点(或最终状态),判断是否有一条路径能从起点连接到终点。很多情况下,连通的路径有很多条,只需要找出一条即可,DFS只关心路径存在与否,不在乎其长短。1.2 DFS思想从起点出发,在规定的方向中,选择一个可选方向,不断向前走,直到无法继续为止;然后尝试另外一种方向,直到最后...原创 2020-04-24 20:26:31 · 1713 阅读 · 0 评论 -
【C++、回溯】LeetCode52. N皇后 II
N皇后 IIn 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给定一个整数 n,返回 n 皇后不同的解决方案的数量。示例:输入: 4输出: 2解释: 4 皇后问题存在如下两个不同的解法。[ [".Q..", // 解法 1 "...Q", "Q...", "..Q."], ["..Q.", // 解法 2 ...原创 2020-04-24 11:24:52 · 194 阅读 · 0 评论 -
【C++、回溯】LeetCode39. 组合总和
组合总和给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [2,3,6,7], target = 7,所...原创 2020-04-24 09:26:22 · 141 阅读 · 0 评论 -
递归方法和回溯方法模板
function fn(n){ //第一步:完整性检查,判断输入或者状态是否非法? if(input/state is invalid){ return; } //第二步:判断递归是否应当结束? if(match condition){ return some value; } //第三步:缩小问题规模,递归调用 result1 = fn(n1); result2...原创 2020-04-23 19:47:13 · 241 阅读 · 0 评论 -
【C++】LeetCode面试题 08.06. 汉诺塔问题
面试题 08.06. 汉诺塔问题在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:(1) 每次只能移动一个盘子;(2) 盘子只能从柱子顶端滑出移到下一根柱子;(3) 盘子只能叠在比它大的盘子上。请编写程序,用栈将所有盘子从第一根柱子移...原创 2020-04-23 16:02:20 · 283 阅读 · 0 评论 -
【C++、快速排序巧用】LeetCode215 数组中的第K个最大元素
数组中的第K个最大元素在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。...原创 2020-04-23 15:13:02 · 283 阅读 · 0 评论 -
【C++、partition】快速排序算法实现
算法思想快速排序也采用分治思想;把原始的数组筛选成较小和较大两个子数组,然后递归地排序两个子数组;在分成较小和较大的两个子数组过程中,如何选定基准值很关键。代码实现partion部分:随机选取基准值,放到数组末尾;遍历数组(0-基准值前,不包括最后的基准值),逐个比较每个数与基准值的大小,只考虑两种情况:不比基准值大、比基准值大;借助i和j两个下标索引,j负责逐个遍历数组元素,i...原创 2020-04-23 10:19:27 · 1950 阅读 · 0 评论 -
【C++】归并排序实现
基本过程通过递归的方法,不断对左右两部分进行拆分比较左右两部分大小,不断将左右两部分按顺序合并代码实现#include<iostream>#include<vector>using namespace std;void merge(vector<int>& nums, int low, int mid, int high);//声明...原创 2020-04-22 11:05:28 · 338 阅读 · 0 评论 -
【C++】LeetCode147 对链表进行插入排序
对链表进行插入排序对链表进行插入排序。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。 重复...原创 2020-04-22 10:35:39 · 148 阅读 · 0 评论 -
【C++】插入排序基本实现和性能调优
参考:https://blog.csdn.net/pilipilipan/article/details/79702298简述插入排序跟选择排序很像,都分为有序区和无序区。但是选择排序是每次都从无序区中选出最小元素插入到有序区末尾,而插入排序是直接将数组的第一个元素作为有序区的第一个元素,每次都拿出无序区第个一元素插入到有序区合适的位置上,直到无序区为空,排序完成。算法描述1 将数组分为有...原创 2020-04-21 15:28:31 · 223 阅读 · 0 评论 -
【C++】冒泡排序算法实现与性能优化
参考:https://blog.csdn.net/pilipilipan/article/details/79702298基本实现:配套设施一起奉上!#include<iostream>#include<vector>using namespace std;//冒泡算法原始void bubbleSort(vector<int> & ...原创 2020-04-21 13:55:09 · 376 阅读 · 0 评论 -
【C++、Map】LeetCode347 前 K 个高频元素
前 K 个高频元素给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]说明:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。 你的算法的时间复杂度必须优于 O(n log n...原创 2020-04-21 08:42:17 · 193 阅读 · 0 评论 -
【C++、二叉搜索树】LeetCode230. 二叉搜索树中第K小的元素
二叉搜索树中第K小的元素给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明: 你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 1示例 2:输入: root = [5,3,6,2,4...原创 2020-04-20 16:33:09 · 181 阅读 · 0 评论 -
【C++、双端队列】LeetCode239. 滑动窗口最大值
滑动窗口最大值给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。进阶:你能在线性时间复杂度内解决此题吗?示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]提示:1 &l...原创 2020-04-20 16:01:37 · 187 阅读 · 0 评论 -
【C++、栈】LeetCode739 每日温度
每日温度根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1,1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。...原创 2020-04-20 14:23:59 · 182 阅读 · 0 评论 -
【C++、栈、结果双100%】LeetCode20 有效的括号
有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false...原创 2020-04-20 10:52:17 · 141 阅读 · 0 评论 -
【C++】LeetCode206 反转链表
反转链表定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000/** * Definition for singly-linked list...原创 2020-04-20 09:43:02 · 130 阅读 · 0 评论 -
【C++、hash】LeetCode242 有效的字母异位词
有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = “anagram”, t = “nagaram”输出: true示例 2:输入: s = “rat”, t = “car”输出: false说明:你可以假设字符串只包含小写字母。采用hash的方法,字符串1中每出现一个字母,该字母在26个字母...原创 2020-04-20 08:12:57 · 209 阅读 · 0 评论 -
【C++、二分法】LeetCode 4.寻找两个有序数组的中位数
题目:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3] nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2] nums2 = [3, 4]则中位数...原创 2020-03-23 15:45:47 · 256 阅读 · 0 评论 -
【C++】查找算法和排序算法
一、 公共知识1. 查找技术(1)顺序查找查找过程:从线性表的第一个元素开始,逐个将线性表中的元素与被查元素进行比较,如果相等,则查找成功;若整个线性扫描结束,仍未找到与被查元素相等的元素,则表示线性表中没有被查元素,查找失败。前提要求:线性表查询次数:最少1次,第一个元素就是要查的元素;最多n次,最后一个元素才是要查的元素,或者查到最后都没发现要查的元素;因此平均情况是n/2...原创 2019-06-03 21:32:00 · 430 阅读 · 0 评论