
算法
yyyyeahhhhhh
腾讯测试开发工程师
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
OJ
1.三数之和哈希解法class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> ret; sort(nums.begin(),nums.end()); //可以把a看成一个循环,b也是一个循环,然后c是-(a+b),这样就可以找出想要的东西了原创 2021-03-26 21:08:49 · 264 阅读 · 0 评论 -
链表的中间结点(2种思路)
链表的中间结点返回链表的中间结点,如果有两个结点,就需要返回第二个中间的结点思路一:利用快慢指针进行求解本题可使用快慢双指针解决:初始时两个指针均指向头指针。如果快指针为空或者快指针的next为空(因为结点的个数可能为偶数个也可能为奇数个),那么此时慢指针即为答案,移动结束。每轮移动,快指针需要移动两次,慢指针需要移动一次。跳转步骤二。/** * Definition ...原创 2020-05-08 13:34:21 · 407 阅读 · 1 评论 -
栈的应用实例
栈的应用实例一.有效的括号题目描述解题思路:根据问题分析,若要判断当前左括号是否存在一个右括号与之对应。则需要判断该括号右边字符串的左括号是否有对应。根据这样的原则,可以使用栈。栈的一大特点是后进先出(last-in first-out),这样可以先判断最右边的左括号。故遍历字符串,将所有左括号压入栈底,当遇到右括号时拿出栈中顶端元素进行判断。若不能匹配则该字符串不满足要求,匹配则推出栈顶元素。在遍历完字符串后,判断栈是否为空。为空则满足,否则不满足。我们可以对所给出的括号序列进行遍历的操作原创 2020-07-11 17:13:55 · 1576 阅读 · 0 评论 -
环型链表
环型链表题目描述:给定一个链表,判断链表当中有没有环解体思路:思路一:可以利用快慢指针的思路,给定两个指针,让两个指针一开始都位于链表头部的位置,然后开始走起来,一个指针每次走一步,一个指针每次走2步,如果说链表是有环的话,那么走的快的链表,就会先进入到环里面,然后一直在环里面绕圈圈,慢的指针也会一步一步走到环的里面,如果有环的话,那么最终两个指针一定是会相遇的,那么就可以通过快慢指针去判断链表里面到底有没有环。代码如下所示:/** * Definition for singly原创 2020-06-30 19:59:42 · 259 阅读 · 0 评论 -
链表的回文结构
链表的回文结构题目描述:解题思路:思路一:利用快慢指针使用快慢指针法,第一步设置一个块指针和一个慢指针,快指针一次走两步,慢指针一次走一步(慢),当快指针下一步为null的时候说明慢指针已经走了一半,这就可以找到中间节点。第二步反转中间链表后面的指针,第三部从头尾向中间扫描,对比每个元素是否相等,如果都相等,则是回文数,否则不是回文数我们可以在整个链表的结构中首先找到链表的中间结点,然后同时记录下来链表中间结点的前一个结点,让链表中间结点的前一个结点的下一个结点为空,逆置中间结点开始位置处的链原创 2020-06-13 14:13:27 · 368 阅读 · 0 评论 -
精选50题(Easy)
精选50题NO.1 爬楼梯题目描述:爬楼梯问题其实也可以堪称是斐波那契数列的变种问题,题给出的要求是每次只能爬一节楼梯或者2节楼梯,那么当我想要1层楼梯的话,那么就有一种方法;当我想要爬要给两层楼梯的话,就有两种爬楼梯的方法,依次递归向下去判断,就可以得出结论说,爬楼梯问题其实就是一个斐波那契数列的变种问题在上述方法中,我们使用 dp数组,其中 dp[i]=dp[i-1]+dp[i-2]可以很容易通过分析得出 dp[i]其实就是第 i个斐波那契数。Fib(n)=Fib(n-1)+Fib(n-2)原创 2020-06-10 15:32:29 · 903 阅读 · 0 评论 -
分割链表
分割链表题目描述:大致思路:可以创建两个新的带有头节点的单链表,一条用于存储值小于x的结点的,一条用于存储值大于x的结点的,当所有的结点都已经被分配到对应的链表中的是时候,只需要将两条链表进行合并,最终就可以得到一条新的链表了。代码如下所示:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) :原创 2020-06-09 15:19:05 · 174 阅读 · 0 评论 -
进制之间的相互转换
进制之间的相互转换进制换算表二进制和十进制之间的相互转化十进制和二进制之间的相互转化十进制整数转换成二进制采用“除2倒取余”,十进制小数转换成二进制小数采用“乘2取整”。例如:135 = ______—>如下图所示,将135除以2,得余数,直到不能整除,然后再将余数从下至上倒取。得到结果:1000 0111二进制转八进制—3个一组八进制转二进制二进制转十六进制—4个一组十六进制转二进制利用栈实现十进制和任意进制之间的转换#include <iostream&原创 2020-05-28 14:41:00 · 288 阅读 · 0 评论 -
KMP算法
KMP算法KMP算法的由来KMP 算法是 D.E.Knuth、J,H,Morris 和 V.R.Pratt 三位神人共同提出的,称之为 Knuth-Morria-Pratt 算法,简称 KMP 算法。该算法相对于 Brute-Force算法有比较大的改进,主要是消除了主串指针的回溯,从而使算法效率有了某种程度的提高。KMP算法是一种改进的字符串匹配算法。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了原创 2020-05-13 10:52:44 · 277 阅读 · 0 评论 -
删除链表的倒数第N个结点
删除链表的倒数第N个结点题目解析:思路一:(带有头节点的版本)采取双重遍历肯定是可以解决问题的,但题目要求我们一次遍历解决问题,那我们的思路得发散一下。我们可以设想假设设定了双指针 p 和 q 的话,当 q 指向末尾的 NULL,p 与 q 之间相隔的元素个数为 n 时,那么删除掉 p 的下一个指针就完成了要求。设置虚拟节点 dummyHead 指向 head设定双指针 p 和 q,初始都指向虚拟节点 dummyHead移动 q,直到 p 与 q 之间相隔的元素个数为 n同时移动 p 与原创 2020-05-11 16:34:08 · 355 阅读 · 0 评论 -
BF算法
BF算法BF算法的概念BF算法,即暴力(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法也就是串的模式匹配算法,在主串中查找与模式T(副串)相匹配的子串,如果匹配成功,找到该子串在主串出现的第一个字符。模式匹配不一定是从主串第一个字符开始,可以在主串中指定起始位置目原创 2020-05-12 10:43:58 · 6186 阅读 · 0 评论 -
移除链表元素
移除链表元素例题:/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */typedef struct ListNode Node;struct ListNode* removeElements(struc...原创 2020-04-07 16:22:21 · 250 阅读 · 0 评论 -
斐波那契
斐波那契问题什么是斐波那契数列斐波那契数列:斐波那契数列,又称黄金分割数列、因数学家列昂纳多·斐波那契,以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)。斐波那契的几种不同形式递归代码#include<...原创 2020-04-03 09:15:08 · 2234 阅读 · 1 评论 -
汉诺塔问题
问题描述相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。汉诺塔问题是用递归方法...原创 2020-02-10 17:01:04 · 2734 阅读 · 0 评论 -
旋转图像——leetcode(48)
题目描述:给定一个 n × n 或者 n*m 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], ...原创 2020-02-03 14:37:32 · 239 阅读 · 0 评论 -
青蛙跳台阶问题
青蛙跳台阶问题首先我们来写一下,求第n个斐波那契数的c语言代码#include<stdio.h>int fib(int n){ if (n == 0) return 0; if (n <= 2) return 1; if (n > 2) return fib(n - 2) + fib(n - 1);}int main(){ int n = ...原创 2020-01-27 13:18:48 · 294 阅读 · 0 评论 -
排序子序列
题目描述:牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列.如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出2输入描述:输入的第一行为一个正整数n(1 ≤...原创 2019-12-05 09:33:32 · 366 阅读 · 0 评论 -
与字符串相关的问题
一.倒置字符串题目描述将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I输入描述:每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100输出描述:依次输出倒置之后的字符串,以空格分割示例1输入I like beijing.输出beijing. like I(1)第一种思路...原创 2019-12-01 09:59:36 · 224 阅读 · 0 评论 -
清除行列
请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零。给定一个N阶方阵int[]mat和矩阵的阶数n,请返回完成操作后的int[][]方阵(C++中为vector>),保证n小于等于300,矩阵中的元素为int范围内。测试样例:[[1,2,3],[0,1,2],[0,0,1]]返回:[[0,0,3],[0,0,0],[0,0,0]]题目陷阱:一看到这个题目可能会想到遍...原创 2019-11-21 09:37:39 · 365 阅读 · 3 评论