算法
allenxguo
C++
展开
-
【LeetCode刷题记录】
原网站为: https://leetcode.com 学习算法,充实自己(^__^) !1、求容器的任意2个元素和某一值的下标 2、求32位整数的反序 3、求数字是否为回文 4、有效的括号 5、计算有序数组不同项的个数 6、查找字符串的最长串原创 2017-12-10 21:29:09 · 272 阅读 · 0 评论 -
LeetCode刷题记录3-无重复字符的最长子串
题目给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wk...原创 2019-04-26 15:15:16 · 898 阅读 · 0 评论 -
LeetCode刷题记录2-两数相加
题目给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原...原创 2019-04-26 14:14:47 · 272 阅读 · 0 评论 -
【算法】反转队列前K个元素
反转队列前K个元素想到队列的反转那肯定首先想到的就是堆栈(同理堆栈反转也可以利用队列)有一个办法我们可以将K个元素入栈,然后可以另一个队列将剩下的元素放入,随后我们首先将栈元素回归原来的队列,最后将临时队列也入队。//使用一个辅助的队列和堆栈实现//前k个放入堆栈,后面的放入队列//取出时堆栈先入后出,达到反转目的void reversalQueue(queue<int>&...原创 2018-09-28 21:49:02 · 2899 阅读 · 0 评论 -
【算法】选择排序
选择排序概述从1-N,循环遍历,每次从剩下的序列中选择最大或者最小的元素放到剩下序列的前一个。n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:初始状态:无序区为R[1…n],有序区为空。第1趟排序在无序区R[1…n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1…1]和R[2…n]分别变为记录个数增加1个的新有序区和记录个数减少1个的...原创 2018-10-06 12:31:26 · 237 阅读 · 0 评论 -
【算法】使用队列实现栈
使用队列实现栈前一篇使用栈实现队列文章用2个栈实现了一个队列,其实实现栈也是同理(修改一点点代码即可实现)。struct Stack{ Stack() {} Stack(std::initializer_list<int> list) : first(list) {}; void push(int value) { first.p...原创 2018-09-27 16:35:06 · 231 阅读 · 0 评论 -
【算法】使用栈实现队列
使用栈实现队列栈中的元素采用LIFO (Last In First Out),即后进先出。队列(Queue)与栈类似,都是采用线性结构存储数据。它们的区别在于,栈采用LIFO方式,而队列采用先进先出,即FIFO(First in First Out)。所以2个栈交换数据可以达到队列的效果。具体实现如下:struct Queue{ Queue() {} Queue(std...原创 2018-09-27 16:26:46 · 256 阅读 · 0 评论 -
【算法】使用栈检查表达式的括号匹配
使用栈检查表达式的括号匹配给定一个表达式字符串exp,编写一个程序来检查对和“{”,“}”,“(”,“)”,“[”,“]”的顺序是否在exp中是正确的。 例如,程序应该为exp =“[()] {} {[()()]()}”打印为true,对于exp =“[(])”则为false。算法步骤其实这种字符串有一个特点,就是如果当前字符串是“右边”的括号类型,那么它的前一个必定是与之匹配的括号。声...原创 2018-09-27 15:14:54 · 3789 阅读 · 2 评论 -
【算法】使用栈计算简单的后缀表达式
###计算后缀表达式计算简单的后缀表达式,形如:“231*+9-”主要还是利用了栈的特性,先入后出。计算的简略步骤如下:第一个元素是2,将其入栈。此时栈元素为2遇到3,将其入栈。此时栈元素为23遇到1,将其入栈。此时栈元素为231遇到操作,弹出2个数字进行乘法操作(先出1,后出3,计算方式为31),将结果3入栈。此时栈元素为23遇到+操作,弹出2个数字进行乘法操作(先出3,后出2,...原创 2018-09-20 22:56:24 · 1765 阅读 · 0 评论 -
【算法】重新排序数组中正数和负数
排序正数和负数这里有很多可行的解决方法,我们可以将正数和负数分离,然后将正数和负数依次交换。void rearrange(std::vector&amp;lt;int&amp;gt;&amp;amp; arrs){ //负数在前 正数在后 int j = -1; for (int i = 0; i &amp;lt; arrs.size(); ++i) { if (arrs[i] &amp;l原创 2018-09-20 21:37:55 · 6424 阅读 · 0 评论 -
【算法】使用栈为栈的元素排序
使用栈为栈的元素排序栈中的元素采用LIFO (Last In First Out),即后进先出。基本思路就是:从源栈中取出一个元素在临时栈中找到元素的位置,该位置到栈顶不合适的元素(大于或者小于,或者其他pred类型)将其全部“扔”回源栈循环1和2即可得到新的临时栈,其中元素就是排好的元素实现代码如下:stack<int> srcStack;stack<in...原创 2018-09-25 22:52:07 · 2587 阅读 · 0 评论 -
【算法】查找第一个没有重复的数组元素
第一个没有重复的数组元素很直接使用两重循环,内部循环检查是否存在多次。 for (int i = 0; i < arrays.size(); ++i) { int j = 0; for (; j < arrays.size(); ++j) { if (i != j && a...原创 2018-09-10 22:39:03 · 3516 阅读 · 0 评论 -
【算法】查找数组中第二小的元素
第二小的元素这里有很多方法可以实现:一个简单的解决方案是按递增顺序对数组进行排序,堆排、快排、归并排序等等都可以达到目的。排序数组中的前两个元素是两个最小的元素。这个解的时间复杂度是O(nlogn)。 关于排序算法后续会继续更新。更好的解决方案是扫描数组两次。在第一次遍历中找到最小元素。让这个元素为x,在第二次遍历中,找到最小的元素大于x,这个解的时间复杂度是O(n)。当然有更好的...原创 2018-09-10 21:58:26 · 16601 阅读 · 2 评论 -
【算法】合并两个排序的数组
合并两个排序的数组对于集合合并这类操作,其实不同的数据量,为了速度或者更小的空间有很多种做法,甚至可使用多线程并发处理都可以(下一节会实现该方式)。下面的例子基于单线程,且数据量较小的实现。拉链法对应合并集合我们可以选择首先将集合1拷贝到集合3中,然后使用插入的方式将集合2插入到集合3中。 此方法的时间复杂度较高,有一种更优的方式实现该算法,那就是拉链法。 以下则是算法实现以及...原创 2018-09-16 21:07:29 · 3009 阅读 · 0 评论 -
【数据结构与算法】学习
简介学习常用算法、数据结构以及高级算法。 学习leedCode算法题常用算法数据结构LeedCode刷题记录刷题记录原创 2018-08-30 22:15:56 · 340 阅读 · 0 评论 -
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]则中位数是 (2...原创 2019-04-26 15:39:29 · 328 阅读 · 0 评论