![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
qq_910076521
这个作者很懒,什么都没留下…
展开
-
roundup_pow_of_two的实现
https://blog.csdn.net/mergerly/article/details/39007987转载 2019-08-27 14:49:49 · 2690 阅读 · 0 评论 -
leetcode 557 反转字符串中的单词 III
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例1:输入: "Let's take LeetCode contest"输出: "s'teL ekat edoCteeL tsetnoc"注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。解题思路,两个指针,一个指针指向单词头,一个指针只想单词尾,如何判读...原创 2019-04-11 13:20:38 · 103 阅读 · 0 评论 -
剑指offer6:从尾到头打印链表
解体思路:用栈,顺序遍历链表,放在栈中,然后在输出出栈顺序即可void PrintListReversingly(ListNode *pHead){ stack<ListNode *> stk; ListNode *p = pHead; while (p != nullptr) { stk.push(p); p = p->next; } while (...原创 2019-04-07 14:21:04 · 93 阅读 · 0 评论 -
leetcode 21合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4在真实的面试中遇到过这道题?解题思路:挺简单的一道题,类似于归并排序合并的过程class Solution {public: L...原创 2019-04-10 18:44:41 · 91 阅读 · 0 评论 -
leetcode 15. 三数之和
给定一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c ,使得a + b + c =0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]解决思路:先排序...原创 2019-04-06 20:26:42 · 61 阅读 · 0 评论 -
堆排序
#include <iostream>#include <vector>using namespace std;void swap(vector<int>&vec, int i, int j){ vec[i] = vec[i] ^ vec[j]; vec[j] = vec[i] ^ vec[j]; vec[i] = vec[i] ^ ...原创 2019-03-27 19:59:29 · 101 阅读 · 0 评论 -
22. 括号生成
给出n代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出n=3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]class Solution {public: void dfs(int left,int right,vector&l...原创 2019-03-31 20:13:43 · 75 阅读 · 0 评论 -
leetcode 206 反转链表
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL这道题的思路是如果要反转链表 ,我们首先得要考虑三个位置,一个是前面得位置,我们叫它pre,一个是当下得,我们叫它head,一个是之后得,它的位置当然是 head->next啦 ,我们所要做的就是将...原创 2019-04-04 20:28:53 · 122 阅读 · 0 评论 -
242. 有效的字母异位词
给定两个字符串s和t,编写一个函数来判断t是否是s的一个字母异位词。示例1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。方法1:将两个字符串进行排序,然后比较两个字符串是否相等class...原创 2019-03-23 21:41:54 · 83 阅读 · 0 评论 -
条款04:确认对象被使用前以先被初始化
1 永远再使用对象的之前堆它初始化对于无任何成员的内置类型,你必须收工完成此事:int x=0;const char *test="hello,world";double d;std::cin>>d; //以读取input stream的方式完成初始化对于内置类型意外的任何其他东西,初始化责任落到构造函数身上,规则很简单:确保每一个构造函数都将对象的每一个成员初始化...原创 2019-03-30 22:55:21 · 99 阅读 · 0 评论 -
哈希表与红黑树的特点及区别
原文地址:https://blog.csdn.net/weixin_42767099/article/details/82874555什么是HashHash,也可以称为“散列”,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出(也就是多对一的关系)。哈希表的构造在...转载 2019-04-08 17:01:11 · 995 阅读 · 0 评论 -
二叉树的后序遍历(非递归)
二叉树的后续遍历顺序为先左,后右,再根,我们可以反过来看,如果是先跟,后右,再左,那么和前序遍历,先跟后左,再右十分相似,前序遍历用到栈结构,先放右子树,再放左子树,那么我们可以先放左子树,再放右子树,先做成先根,后右,再左的方式,然后将其反过来(再用一个栈)就将这个问题解决void houxu(Node *root){ stack<Node*> stk; stack<...原创 2019-04-24 18:25:34 · 133 阅读 · 0 评论 -
297. 二叉树的序列化与反序列化
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。示例:你可以将以下二叉树:...原创 2019-04-19 21:32:58 · 98 阅读 · 0 评论 -
leetcode198. 打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷...原创 2019-04-26 20:47:21 · 74 阅读 · 0 评论 -
144. 二叉树的前序遍历(非递归)
给定一个二叉树,返回它的前序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]进阶:递归算法很简单,你可以通过迭代算法完成吗?解题思路:如图/** * Definition for a binary tree node. * struct TreeNode { *...原创 2019-04-17 20:22:07 · 144 阅读 · 0 评论 -
leetcode 160. 相交链表
编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点...原创 2019-04-14 21:53:52 · 65 阅读 · 0 评论 -
leetcode 234. 回文链表
请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用O(n) 时间复杂度和 O(1) 空间复杂度解决此题?解法1:遍历链表,分别放入栈中,然后出栈和链表从头遍历进行比较,如果不等为false,最后能够结束为true,时间复杂度为O(n),空间复...原创 2019-04-13 14:52:38 · 101 阅读 · 0 评论 -
leetcode 48. 旋转图像
给定一个包含mxn个元素的矩阵(m行,n列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]这道题和旋转矩阵非常相似 (leetcode 54螺旋矩阵),外部循环一模一样,内部也只是找出规律就可以了...原创 2019-04-12 23:17:18 · 110 阅读 · 0 评论 -
leetcode 54螺旋矩阵
给定一个包含mxn个元素的矩阵(m行,n列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]]...原创 2019-04-12 21:56:38 · 285 阅读 · 0 评论 -
leetcode 94 二叉树得中序遍历
给定一个二叉树,返回它的中序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶:递归算法很简单,你可以通过迭代算法完成吗?用栈解决 :/** * Definition for a binary tree node. * struct TreeNode { * int ...原创 2019-04-08 18:14:59 · 111 阅读 · 0 评论 -
102. 二叉树的层次遍历
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]dfs解法:class Solution {public...原创 2019-03-26 20:20:42 · 72 阅读 · 0 评论 -
225. 用队列实现栈
使用队列实现栈的下列操作:push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是push to back,peek/pop from front,size, 和is empty这些操作是合法的。 你所使用的语言也许不支持队列。你可以使用 li...原创 2019-03-30 19:01:10 · 92 阅读 · 0 评论 -
leetcode 239. 滑动窗口最大值
给定一个数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口k内的数字。滑动窗口每次只向右移动一位。返回滑动窗口最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值-------...原创 2019-03-22 21:41:55 · 326 阅读 · 0 评论 -
二分查找(详细)
博客为极客时间-数据结构和算法之美的总结先亮代码,思路就不说了,比较简单#include <iostream>#include <vector>using namespace std;bool erfen(vector<int>&vec, int n){ int left = 0, right = vec.size() - 1;...原创 2019-03-19 17:59:48 · 197 阅读 · 0 评论 -
哈希表
leetcode1 二数之和leetcode3 无重复字符的最长子串原创 2018-12-12 11:32:47 · 118 阅读 · 0 评论 -
leetcode 1两数之和
给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]解法...原创 2018-12-12 11:31:15 · 114 阅读 · 1 评论 -
数据结构分类
二分查找哈希表链表栈原创 2018-12-11 20:32:37 · 148 阅读 · 0 评论 -
二分查找
leetcode 34. 在排序数组中查找元素的第一个和最后一个位置原创 2018-12-11 20:31:10 · 134 阅读 · 0 评论 -
leetcode34. 在排序数组中查找元素的第一个和最后一个位置
这道题主要的方法为二分查找思路为首先找到第一个目标数,然后通过第一个目标数向两边扩张寻找class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { if(nums.size()==1&&nums[0]==targe...原创 2018-12-11 20:13:00 · 106 阅读 · 0 评论 -
leetcode3 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是"abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是"b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符...原创 2018-12-15 15:13:31 · 113 阅读 · 0 评论 -
链表
leetcode2 两数相加原创 2018-12-13 17:39:12 · 125 阅读 · 0 评论 -
leetcode2 两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 ...原创 2018-12-13 17:38:15 · 109 阅读 · 0 评论 -
斐波那契数列(三种方法,普通递归,记忆化递归,动态规划)
#include <iostream>#include <unordered_map>#include <vector>using namespace std;//递归无优化int dfs01(int n){ if (n == 1) return 1; if (n == 2) return 2; return dfs01(n - ...原创 2019-03-15 18:08:32 · 2381 阅读 · 0 评论 -
散列表(如何解决哈希冲突)
博客为极客时间-数据结构和算法之美的总结散列表是什么就详细解释了,说一下散列表得三个基本要求吧散列函数三点基本要求1 散列函数计算得到得散列值是一个非负整数2 如果key1=key2,那个hash(key1)==hash(key2);3 如果key1不等于key2,那么hash(key1)不等于hash(key2)如何解决哈希冲突1 开放寻址法开放寻址得核心思想是,如果出...原创 2019-03-20 17:20:44 · 1455 阅读 · 0 评论 -
295. 数据流的中位数
中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4]的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。 double findMedian() - 返回目前所有元素的中位数。示例:a...原创 2019-03-29 17:45:17 · 149 阅读 · 0 评论 -
用master公式来求递归的时间复杂度
来自于左神的讲解:master公式: T(N)=a*T(N/b)+)(N^d)a为发生的次数,T(time)N是原始样本量n/b 是子过程的样本量O(n^d) 除了调子过程外,剩下的开销log(b,a)>d --> 复杂度为 O(N^log(b,a));log(b,a)=d --> 复杂度为 O(N^d * logN);log(...原创 2019-03-25 22:38:23 · 479 阅读 · 0 评论 -
小和问题
小和问题:在一个数组中,每一个数左边比当前小得数累加起来,叫做这个数组得小和,每一个数组得小和例子:[1,3,4,2,5]1左边比1的数:没有3左边比3小的数:14左边比1小的数:1,32左边比2小的数:15左边比5小的数:1,3,4,2所以小和为1+1+3+1+1+3+4+2=16暴力解法就不列举了解法:这道题类似于归并排序,将数组分之后,在合并的...原创 2019-03-25 21:56:32 · 127 阅读 · 0 评论 -
归并排序
#include <iostream>#include <vector>using namespace std;void merge_sort(vector<int> &vec, int left, int right, int mid){ int i = left; //左指针 int j = mid+1;//右指针 int t = ...原创 2019-03-18 19:45:33 · 75 阅读 · 0 评论 -
leetcode703. 数据流中的第K大元素
设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。你的KthLargest类需要一个同时接收整数k和整数数组nums的构造器,它包含数据流中的初始元素。每次调用KthLargest.add,返回当前数据流中第K大的元素。示例:int k = 3;int[] arr = [4,5,8,2];KthLargest kthL...原创 2019-03-21 22:25:42 · 165 阅读 · 0 评论 -
leetcode232. 用栈实现队列
使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2); queue.peek(); // 返回 1q...原创 2019-03-21 21:07:04 · 81 阅读 · 0 评论