06 2021 档案

摘要:买股票 一、问题描述 假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少? 示例 1: 输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 阅读全文
posted @ 2021-06-30 22:07 瑜琦 阅读(242) 评论(0) 推荐(0)
摘要:反转整数 一、问题描述 给定一个32位有符号整数,将整数中得到数字进行反转 示例: 输入:123 输出:321 输入:-123 输出:-321 输入:120 输出:21 二、算法思想 取一个数的个位数只需要这个数对10取余,可以通过不断的对10取余然后除10,依次取出个位、十位……的数。最后就能得到 阅读全文
posted @ 2021-06-29 20:49 瑜琦 阅读(81) 评论(0) 推荐(0)
摘要:最长回文子串 一、问题描述 给出一个字符串S,求S的最长回文子串的长度 例如:“PATZJUJZTACCBCC”的最长回文子串为"ATZJUJZTA" 二、解题思路 方法一:暴力解法,新建两个指针在字符串两端点,依次判断指针区间内的字符串是否为回文串,如果是则返回长度,否则就缩小区间再次判断。 方法 阅读全文
posted @ 2021-06-27 21:21 瑜琦 阅读(60) 评论(0) 推荐(0)
摘要:最长公共子序列 一、问题描述 给定两个字符串或数字序列A和B,求一个字符串,使得这个字符串是A和B的最长公共部分(子序列可以不连续),返回长度 案例,字符串"sadstory"和"adminsorry"的最长公共子序列为"adsory" 二、问题分析 暴力解法,假设A和B的长度为n和m,那么找出A在 阅读全文
posted @ 2021-06-23 21:16 瑜琦 阅读(54) 评论(0) 推荐(0)
摘要:最长不下降子序列 一、问题描述 现在给出一个数字序列(整数),要求找出它的一个最长不下降子序列,返回这个子序列的长度,即该数字中最长的非递减子序列,元素可以不是连续的,但要满足元素间的前后位置关系。 例如:序列A={1,2,2,-1,-2,7,9},则A的最长不下降子序列为{1,2,2,7,9} 二 阅读全文
posted @ 2021-06-22 21:33 瑜琦 阅读(100) 评论(0) 推荐(0)
摘要:动态规划的递推写法 一、数塔问题 如图所示的一个数塔存储在一个二维数组中,f[i][j],其中i表示从上往下数的层数,j表示元素在这层从左往右数的位置,例如f[2][1]=8;现在从第一层向下走,每经过一个节点就把节点值累加,到达最后一层后返回,请问,在所有可能的遍历和中,能得到的最大值是多少。 如 阅读全文
posted @ 2021-06-21 20:28 瑜琦 阅读(138) 评论(0) 推荐(0)
摘要:动态规划01 一、什么是动态规划 动态规划是一种用来解决一类最优化问题的算法思想。将一个复杂的问题分解成若干个子问题(有点像分治),然后综合子问题的最优解找到原问题的最优解(这里有点像贪心)。在求解每个子问题的时候,每个求解过的子问题会被记录下来,在求解同样的子问题时就会直接读取上次被记录的结果,从 阅读全文
posted @ 2021-06-20 20:22 瑜琦 阅读(96) 评论(0) 推荐(0)
摘要:链表练习2 PAT乙级1025/甲级1074:反转链表 算法思路:将链表分块,每k个节点一块,针对每块中的节点进行反转操作 反转链表的伪代码 设该区域头节点为head,定义指针p,q,r p=head; q=p->next p->next = null; while(k--){ r = q->nex 阅读全文
posted @ 2021-06-19 20:17 瑜琦 阅读(46) 评论(0) 推荐(0)
摘要:链表练习 题目:PAT甲级1052 题目大意:给出一个链表,要求按值的递增顺序对链表进行排序 输入格式:第一行,输入N为链表节点数目,5位的链表首地址,以后每行为链表各个节点的信息(地址:值:后继节点地址),后继地址为-1表示NULL 输出格式:第一行输出节点数目,排序后链表首节点地址,以后每行为各 阅读全文
posted @ 2021-06-18 21:29 瑜琦 阅读(40) 评论(0) 推荐(0)
摘要:链表习题 一、链表概念 关于链表概念请参照严蔚敏版《数据结构》 二、例题 PAT甲级1032 题目大意:找出两个字符串的公共后缀 输入样例,每组输入的第一行为,第一个串的首地址,第二个串的首地址,节点个数;以下的每一行为,当前节点地址、当前节点值、下一个节点的地址 大致意思如上图 算法思路:可以用一 阅读全文
posted @ 2021-06-17 21:12 瑜琦 阅读(49) 评论(0) 推荐(0)
摘要:队列使用 一、队列概念 队列是一种先进先出的数据结构,与生活中常见的队列一样,具体可以参考严蔚敏版《数据结构》中关于队列的概述 二、题目 题目大意,给出NP只老鼠,按照NG个老鼠一组进行分组,第二行输入每只老鼠的质量,第三行输入这些老鼠的编号。 要求对NP只老鼠的重量进行排名,NG只一组进行小组赛, 阅读全文
posted @ 2021-06-16 21:29 瑜琦 阅读(69) 评论(0) 推荐(0)
摘要:栈的练习 题目:PAT甲级1051 一:题目描述 给出一个大小为M的栈,现在向栈中顺序输入N个数字,这N个数字属于集合{1、2、3……N}无重复输入,在输入的过程中可以进行出栈操作,设计一个算法,要求给出K个序列,判断这些序列是否为可能的出栈序列,对于某个序列,如果该序列是可能的出栈序列则输出YES 阅读全文
posted @ 2021-06-15 21:19 瑜琦 阅读(128) 评论(0) 推荐(0)
摘要:数据结构:栈 一、概念 对于学过数据结构的人来说,栈的概念应该不陌生,栈是一种先进后出的数据结构,可以把栈想象成一摞盘子,不管是加盘子还是拿盘子,都要从最上面拿。关于栈的详细概念,可以查阅严蔚敏的《数据结构》这本书。 二、例题 1、简单计算器 题目描述:读入一个只包含+,-,*,/的非负整数计算表达 阅读全文
posted @ 2021-06-14 21:12 瑜琦 阅读(84) 评论(0) 推荐(0)
摘要:二分法练习 一、PAT甲级1010 题目描述:给出两个不超过10位的“数字”,给出其中一个数的基数(表示这个数是几进制),现在给出的两个数在各自的进制下是相等的,要求找出另一个数在什么进制下与已给出的数相等,如果不存在就返回impossible 输入中:N1,N2表示输入的两个数;radix表示其中 阅读全文
posted @ 2021-06-10 20:56 瑜琦 阅读(117) 评论(0) 推荐(0)
摘要:二分法练习 一、完美数列 二、算法思路 为了找出连续递增的一系列元素,所以可以先的对数组进行排序,然后可以针对每个位置的元素,寻找以该元素为下界,满足题目要求的最大数组,这个数组肯定是原排序后数组中连续的一段,那么寻找上界的过程就可以通过二分查找的方法实现 三、算法描述 1、首先对数组进行一次排序算 阅读全文
posted @ 2021-06-09 19:47 瑜琦 阅读(109) 评论(0) 推荐(0)
摘要:双指针练习3 一、PAT甲级1048(题目已经过翻译) 1、题目描述 Eva去商场购物,他有各种面值的钱,他希望付款时只用两枚硬币。 输入格式,第一行输入N表示元素个数,输入M表示总价;第二行,输入各个面值的硬币 题意:给出一个数组中的若干个元素,现在给出一个和,要求从数组中找到两个元素,这两个元素 阅读全文
posted @ 2021-06-08 21:28 瑜琦 阅读(46) 评论(0) 推荐(0)
摘要:双指针练习2 一、PAT甲级1029 这里我把题目已经翻译过了,原题目是英文 问题描述:给出两个递增序列,现在要求找出两个递增序列合并后的序列的中位数,可以不执行合并操作,只要找到中位数就行。 解题思路:既然题目以及给出了每组数据的个数,那么当然要把这个信息利用起来,就如上面的案例中第一组案例有4个 阅读全文
posted @ 2021-06-07 22:03 瑜琦 阅读(58) 评论(0) 推荐(0)
摘要:双指针练习 一、完美数列(PAT乙级1030) 下面是书中代码 算法思想 首先使数列有序,对于有序递增的数列,可以得出a[j]<=a[i]*p成立,那么在i到j这个递增区间中的所有数都对这个等式成立,也就是说一次性找到一个区间,这个区间中都是符合a[j]<=a[i]*p的数,i为区间开始的元素,也是 阅读全文
posted @ 2021-06-06 22:34 瑜琦 阅读(67) 评论(0) 推荐(0)
摘要:快速排序(重点) 一、算法思想 快排可以说是数据结构这门课里很重要的一个内容了,关键就在于快排的思想适用于很多算法场景,快排的思想就是交换,通过不断交换两个元素的位置使得最后能在序列中确定出一个元素在排序算法的最终位置。 例如给出序列{5,3,6,2,1,4},快排的思想就是把第一个元素A[1]当做 阅读全文
posted @ 2021-06-04 21:50 瑜琦 阅读(2603) 评论(0) 推荐(0)
摘要:双指针 一、引子 在我早期刷leetcode入门题时就很喜欢用双指针了,下面我来详细说明一下什么是双指针以及双指针的一些应用场合,首先,双指针这个翻译已经很明确的指出了这种编程技巧的思想了,就是定义两个指针,然后对这两个指针操作从而达到降低时间复杂度的目的(如果能使用常数倍空间复杂度来使得时间复杂度 阅读全文
posted @ 2021-06-03 22:15 瑜琦 阅读(403) 评论(0) 推荐(0)
摘要:快速幂 一、问题描述 现在假设写一个程序计算2^18,那么可以得到代码 for(int i=0;i<18;i++) a=a*2;//a的初值为1。 这个代码可以很轻松的跑出来,但是对于指数为n的时候呢?如果n取10万取10亿呢,显然这个代码效率太低了,因为对于一个足够大的n即使是O(n)也是一个很高 阅读全文
posted @ 2021-06-02 22:12 瑜琦 阅读(296) 评论(0) 推荐(0)
摘要:二分法拓展 一、引子 可以设想一个问题,怎么求?我们日常生活中总是找平方小于2和平方大于2的两个数,那么肯定介于这两个数之间,然后我们让两个数不断逼近,左边加一点,右边减一点,最终我们一定能求得一个近似的结果,其实采用二分法也可以实现求这个功能。 二、算法描述 我们可以定义一个区间[1,n]那么的值 阅读全文
posted @ 2021-06-01 22:02 瑜琦 阅读(186) 评论(0) 推荐(0)