随笔分类 - 数据结构与算法Data Structure and Algorithm
摘要:题目:现有一个 n 位数,你需要删除其中的 k 位,请问如何删除才能使得剩下的数最大?比如当数为 2319274, k=1 时,删去 2 变成 319274 后是可能的最大值。思路:1、贪心算法每次从高位向低位数,删除高位数字比低位数字小的那位数字。如2319274第一次21,略过,1 > nums...
阅读全文
摘要:主要内容:1、算法思想2、快速排序算法3、划分算法partition4、快排过程图解5、完整代码1、算法思想快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。(1) 分治法的基本思想 分...
阅读全文
摘要:什么是前缀和、前缀积?前缀和、前缀积也称前缀和数组,前缀积数组。给一数组A,前缀和:新建一数组B,数组中每一项B[i]保存A中[0…i]的和;后缀和:新建一数组B,数组中每一项B[i]保存A中[i…n-1]的和;前缀积:新建一数组B,数组中每一项B[i]保存A中[0…i]的积;后缀积:新建一数组B,...
阅读全文
摘要:题目:给一数组,如果存在众数,找出众数,即超过一半的数,如果不存在,返回-1.思路:众数:众数出现的次数大于其他所有数出现次数之和方法1:hashmap通过遍历数组,将数组每个数都通过hashmap来统计其出现的个数,如果某个数个数超过一半,则为众数。时间空间复杂度均为O(n)方法2:Moore V...
阅读全文
摘要:题目:1、给一数组,所有的数都出现了两次,只有一个数出现了一次,求这个数。2、给一数组,所有的数都出现了两次,只有两个数出现了一次, 求这两个数。思路:位运算1、将数组里所有的数都做异或操作,因为相同的数异或之后就等于0,所以结果就是只出现一次的那个数。2、同样将数组里所有的数做异或操作,相同的数异...
阅读全文
摘要:题目:翻转句子中全部的单词,单词内容不变,例如I’m a student. ---->student. a I’am思路:与前面数组循环移动或翻转是一样的思路。1、每个单词单独翻转,如m’I a .tneduts2、翻转整个句子,如student. a I’m由于这里是全部翻转,所以先单独翻转,后整...
阅读全文
摘要:题目:给定两个串a和b,问b是否是a的子串的变位词,例如输入a=hello,b=lel,lle,ello都是true,但b=elo是false。(字串是连续的)思路:滑动窗口思想:动态维护一个“窗口”,比如b的长度是3,考察a[0..2],a[1..3],a[2..4]是否是b的变位词,关键在于如何...
阅读全文
摘要:题目:给定两个字符串X,Y,求二者最长的公共子串,例如X=[aaaba],Y=[abaa]。二者的最长公共子串为[aba],长度为3。子序列是不要求连续的,字串必须是连续的。思路与代码:1、简单思想:遍历两个字符串X、Y,分别比较X的字串与Y的字串,求出最长的公共字串。设X长度为m,Y长度为n,最长...
阅读全文
摘要:问题:最长公共子序列就是寻找两个给定序列的子序列,该子序列在两个序列中以相同的顺序出现,但是不必要是连续的。例如序列X=ABCBDAB,Y=BDCABA。序列BCA是X和Y的一个公共子序列,但是不是X和Y的最长公共子序列,子序列BCBA是X和Y的一个LCS,序列BDAB也是。思路:1、最简单的方法就...
阅读全文
摘要:题目要求:给字符数组,要求删除其中的某个字符,并将某个字符替换。假设将空格替换为%20,并且原数组大小足够大,只能在原数组操作。解题思路:删除操作:遍历数组,如果不是删除的字符,则依次写入数组,遇到要删除的字符,则跳过;复制/替换操作:复制是指将数组中某个字符复制n次,如b变成bb;是指将字符替换成...
阅读全文
摘要:主要内容:1、什么是回文?2、字符子串和字符子序列的区别3、最长回文子序列的思路和代码4、回文子序列个数的思路和代码1、什么是回文palindrome?回文指的是正读和反读都一样的字符串,如aba,abba等2、字符子串和字符子序列的区别字符字串指的是字符串中连续的n个字符;如palindrome中...
阅读全文
摘要:题目:在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边。请完成sort的代码实现(C++或Java)C++:void sort(int N, int[]a){ …}例如: 当输入a = {8,4,1,6,7,4,9,6,4},a = {1,7,9,8,4,6,4,6...
阅读全文
摘要:题目:给定一个字符串,请写一段代码找出这个字符串中首先出现两次的那个字符。 例如字符串为"qywyer23tdd",输出为y。思路:1、从头到尾遍历字符串str,如果str[i]为首先出现两次的字符,则满足的条件是str[i]==str[j](0<=j<i);2、遍历字符串时,通过类似hash数组来...
阅读全文
摘要:逆转链表是简单而又简单的链表问题,其问题的方法之一可以设置三个指针,一个指向当前结点,一个指向前驱结点,一个指向后继指针代码如下:class Solution {public: ListNode* ReverseList(ListNode* pHead) {// if(pHead==N...
阅读全文
摘要:题目:一头刚出生的小母牛,4年后生一头小母牛,以后每年生一头,现有一头刚出生的小母牛,问20年后共有多少头牛?思路:列举前n年的情况:1、1、1、2、3、4、6、8、11。。。将规律抽象成公式:F(1)=1F(2)=1F(3)=1F(n)=F(n-1)+F(n-3)F(n):表示第n年共有多少头牛F...
阅读全文
摘要:题目:利用递归算法输出正整数和为n的所有不增的正整数和式。例如当n=5时,不增的和式如下:5=55=4+15=3+25=3+1+15=2+2+15=2+1+1+15=1+1+1+1+1解题思路:形如这种求子集的问题都可以采用回溯法来解决,回溯法即一种加上剪枝判断的递归算法。解决问题的关键词:不增代码...
阅读全文
摘要:主要内容:1、冒泡排序2、冒泡排序实现13、冒泡排序实现24、冒泡排序实现3一、冒泡排序的原理冒泡排序是简单的一种排序方法,效率低下,复杂度为O(n^2),其具体的算法流程如下:1、算法需要对数组遍历n-1遍;2、在每一次遍历中,比较前后相邻元素的大小,如果第一个比第二个大,则交换他们,这样第一次遍...
阅读全文
摘要:主要内容:1、MP算法2、OMP算法3、OMP算法的matlab实现4、OMP在压缩感知和人脸识别的应用一、MP(Matching Pursuits)与OMP(Orthogonal Matching Pursuit)算法 内容:稀疏信号的表示(字典、稀疏系数)、MP算法、MP算法的缺点、OMP、O...
阅读全文
摘要:主要内容:1、循环算法2、递归算法一、反转单链表之循环算法1. 链表有两种:带头结点的:头结点存储长度信息,头结点的next指向第一个实际节点;不带头结点的,头结点即第一个节点;这里使用带头结点的链表;2. 需要三个指针,记录当前节点(反转用)、前一个节点、后一个节点(反转之后前进用)。代码如下:/...
阅读全文
摘要:算法设计与分析试题(中国科学院大学-陈玉福-2011秋) 一. 回答下列问题: (每小题5分) 1.陈述算法在最坏情况下的时间复杂度和平均时间复杂度;这两种评估算法复杂性的方法各自有什么实际意义?最坏情况下的时间复杂度称最坏时间复杂度。一般不特别说明,讨论的时间复杂度均是最坏情况下的时间复杂度。这样做的原因是:最坏情况下的时间复杂度是算法在任何输入实例上运行时间的上界,这就保证了算法的运行时间不会比任何更长。平均时间复杂度是指所有可能的输入实例均以等概率出现的情况下,算法的期望运行时间。2.阐述动态规划算法与贪心算法的区别,它们都有那些优势和劣势?动态规划算法与贪心算法都要求问题具有最优子结构
阅读全文

浙公网安备 33010602011771号