- 博客(38)
- 收藏
- 关注
原创 剑指Offer:剪绳子
题目给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。解法一思路动态规划。dp1…n]其中dp[i]代表长度为i的身子剪成若干段的最大乘积。d...
2020-04-21 20:08:35 194
原创 剑指Offer:二叉搜索树的第k个结点
题目给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。思路二叉搜索树的中序遍历顺序即为树中所有节点的升序排列顺序。因此按照中序遍历所访问到的第k个节点即为第k小节点。此处用一变量index记录访问到了第几个节点。代码public class Solution { int index = 0; ...
2020-04-10 20:09:48 113
原创 剑指Offer:链表中环的入口结点
题目给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。思路若链表中环有n个节点,那么从头结点开始一指针先移动n步,另一指针再开始移动,则二者将相遇于环的入口节点。可令一快指针一次走两步,一慢指针一次走一步,二者迟早相遇于环中。此时从该相遇节点出发绕环一周所走步数即为环中的节点数。代码public class Solution { public L...
2020-04-10 20:04:38 108
原创 剑指Offer:数组中逆序对
题目在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007思路归并排序求数组中逆序对个数。复习一下归并排序的代码。代码public class Solution { long cnt=0; public void merges...
2020-04-08 20:19:09 121
原创 剑指Offer:删除链表中重复的结点
题目在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路先建立一个头结点以防第一个链表节点就是重复的。然后使用双指针 ,pre指针指向当前确定不重复的那个节点,cur向前搜索判断是否重复。代码public class ...
2020-04-08 19:36:48 94
原创 剑指Offer:表示数值的字符串
题目请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。思路没什么技巧性,就只能靠if-else硬怼。判断条件很多,很难一次性考虑周全。这题基本是一点点挤牙膏,试错试出来的。代码public cl...
2020-04-07 20:23:48 103
原创 剑指offer:构建乘积数组
题目给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)思路按照剑指offer的思路:先算下三角得数组b,再将上三角中的数...
2020-04-07 19:17:18 90
原创 剑指Offer:把字符串转换成整数
题目将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。思路先去掉前后空格,然后对符号位做一下判断就很简单了。需要注意的是进行判断上溢和下溢的情况。这里比较坑的一点是java的整型字面值字面值默认是int类型,因此0x80000000等于-2147483648,与long进行比较的时候会类型提升,然而这并不改变其符号位,依然是-2...
2020-04-06 20:51:47 351
原创 剑指offer:扑克牌顺子
题目LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就...
2020-04-06 20:39:29 70
原创 剑指Offer:孩子们的游戏(圆圈中最后剩下的数)
题目每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小...
2020-04-05 20:54:22 86
原创 剑指Offer(44):翻转单词顺序列
题目牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?思路要寻求O(1)的空间复...
2020-04-05 18:25:17 157
原创 剑指Offer(4):重建二叉树
题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路前序遍历:中左右中序遍历:左中右后序遍历:左右中本题为前序遍历和中序遍历,最少需要两种遍历方式,才能重建二叉树。前序遍历序列中,第一个数字总是...
2020-04-05 17:06:20 92
原创 剑指Offer(21):栈的压入、弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路:新建一个栈,将数组A压入栈中,并维护一个B数组指针,当栈顶元素等于数组B指针元素...
2020-04-05 16:32:32 77
原创 LCA 最近公共祖先
本篇博客总结一下LCA问题及其离线算法tarjan,并辅以模板以助记忆。所谓LCA问题就是查询两个节点的最近公共祖先,tarjan算法利用深度优先检索和并查集来解决这一问题,对于所有的查询,可在一次dfs的过程中求解。具体的tarjan算法看这篇博客,这位博主写得已经非常完备了:最近公共祖先LCA(Tarjan算法)的思考和算法实现看完了tarjan的工作过
2017-08-06 16:13:30 255
原创 leetcode 2 sum & 3 sum & 4 sum
Two SumGiven an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may no
2017-08-02 17:33:22 227
原创 leetcode-300 Longest Increasing Subsequence
Longest Increasing SubsequenceLIS问题,这里给出两种解法:方法1:普通DP O(n^2)数组dp中保存该位置LIS的最大长度,首先全部置1,从前向后推,比较nums[i]和其之前元素nums[j]的大小,如大于则可以和j处计算得到的序列构成新的上升序列,长度加1.class Solution {public: int lengthOfL
2017-08-02 15:35:39 213
转载 leetcode-141&142 Linked List Cycle I & II
141. Linked List Cycle142. Linked List Cycle II参考这篇文章:http://www.cnblogs.com/hiddenfox/p/3408931.html
2017-08-01 22:46:59 187
原创 leetcode-109 Convert Sorted List to Binary Search Tree
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.使用快慢两个指针找到单链表的中间节点,作为BST的根,将左右两个单链表断开后分别递归地建立为其左右子树。注意递归边界:单链表为空和只有一个元素时特殊处理一下。/** *
2017-08-01 22:40:40 181
原创 leetcode-101 Symmetric Tree
101. Symmetric TreeGiven a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).For example, this binary tree [1,2,2,3,4,4,3] is symmetric: 1 / \ 2
2017-08-01 22:29:53 168
原创 leetcode-26&80 Remove Duplicates from Sorted Array I & II
26 Remove Duplicates from Sorted Array IGiven a sorted array, remove the duplicates in place such that each element appear only once and return the new length.Do not allocate extra space f
2017-08-01 21:27:37 284
原创 leetcode-7&9
7.Reverse IntegerReverse digits of an integer.Example1: x = 123, return 321Example2: x = -123, return -321Note:The input is assumed to be a 32-bit signed integer. Your function shoul
2017-08-01 21:16:14 246
原创 leetcode-31 Next Permutation
这道题让我们求下一个排列顺序,有题目中给的例子可以看出来,如果给定数组是降序,则说明是全排列的最后一种情况,则下一个排列就是最初始情况。我们再来看下面一个例子,有如下的一个数组1 2 7 4 3 1下一个排列为:1 3 1 2 4 7那么是如何得到的呢,我们通过观察原数组可以发现,如果从末尾往前看,数字逐渐变大,到了2时才减小的,然后我们再从后往
2017-08-01 20:56:21 181
原创 leetcode 5-Longest Palindromic Substring
题意:求最长回文子串。思路:枚举中心对称点,可以是字符,也可以是字符之间的空隙,一共2*n-1个点。还可以采用动态规划的最长公共子串方法求解,个人没有使用这种方法。代码:class Solution {public: string longestPalindrome(string s) { if(s.length()==0) retur
2017-07-21 11:12:08 154
原创 leetcode 4-Median of Two Sorted Arrays
题意:给出两个已经排好序的数组a[1...m]和b[1...n],求这两个数组合在一起后的中位数。明确要求时间复杂度为O(log(m+n))。思路:要求复杂度为O(log(m+n)),自然不能先合并再找中位数,那样的话复杂度为O(m+n)。若m+n为奇数,中位数为第(m+n)/2小的元素,否则为(第(m+n)/2小的元素+第(m+n)/2+1小的元素)/2。所以可以写一个求第k小的元素
2017-07-21 10:55:30 148
原创 leetcode3-Longest Substring Without Repeating Characters
听说今年南大机试有两道leetcode的原题,故开刷。今天下午刷了4道,leetcode有一个好处(或者说是坏处),就是不需要你去操心输入输出,直接完成提供给你的函数即可。代码编写、调试均可在网页上进行,这写起来还是挺爽的。多日不刷算法,手又有点生疏了,机试这种还是要多练啊。进入正题,顾名思义这题就是求一个字符串的最长无重复字符子串。我的思路是用一个数组记录每种字符出现的位置,当发生重复时
2017-07-21 00:29:14 158
原创 随笔
恍恍惚惚之间七月已过去大半,大学生涯也到了最后一年。看着别人参加一个个夏令营,拿到offer,而自己的去向却悬而未决真的很不好受。6、7月份间发生了不少事,先是不愿意直博拒掉了上交电院的offer,一门心思想着南大,结果却发现南大开放日自己连入营的机会都没有,当时真的很震惊,虽然这个入营名额的分配的确有不合理之处,但也没辙,只能说自己硬实力不足,运气又不佳。之后考完期末考试回家,歇了几天,又面了东
2017-07-20 22:49:31 363
原创 POJ1716 Integer Intervals(区间选点)
题意:找出最小的集合,使他满足给定的各个区间内至少有两个点被包括。思路:和之前做过的那道雷达站问题非常类似,区间选点,不过每个区间要有两个点,而且区间是离散的为整数。回忆一下之前的区间选点,是拿区间的右端点作为标记与后面的区间进行比较,也就是可以认为每次选的点都是右端点。在这里由于要选两个点,自然可以想到可以取区间倒数两个点作为标记。每次比较时分情况讨论:①两标记点均在区间内,无需变化。
2017-06-23 15:16:31 164
原创 POJ1323 Game Prediction(贪心)
题意:有M个人,一人N张牌,每轮牌面最大的人赢(牌面只可能是1~M*N中的一个数且不重复),给出一个人的牌,求其至少能够赢的局数。分析:出一张排,看对手是否有比这张牌更大的牌,如果有取其最小(贪心),即对手出一张最小可以压过你的牌。否则这轮就赢了。需要用到一个vis数组来记录哪些牌出过。代码:#include #include #include using namespace s
2017-06-21 16:45:24 206
原创 POJ1328 Radar Installation(贪心)
题意:在一个坐标系中,x中代表海岸,x轴以上有n个点,代表着n个岛屿,在x轴上建雷达,一直雷达的覆盖范围为半径为d的圆,求在x轴上最少建多少个雷达,才能把全部的岛屿覆盖起来,如果不能覆盖,输出-1.分析:之前做这题,没有考虑将其变形,而是夏继巴乱做了一通,果然WA。看了别人的思路,才醒悟过来,应该先求每个岛对应的雷达站在x轴上的范围,也就是以岛为圆心,d为半径做圆,求其与x轴的交点。如果没有交
2017-06-21 14:35:07 226
原创 POJ2586 Y2K Accounting Bug(贪心)
题意:有一个公司由于某个病毒使公司赢亏数据丢失,但该公司每月的 赢亏是一个定数,要么一个月赢利s,要么一月亏d。现在ACM只知道该公司每五个月有一个赢亏报表,而且每次报表赢利情况都为亏。在一年中这样的报表总共有8次(1到5,2到6,…,8到12),现在要编一个程序确定当赢s和亏d给出,并满足每张报表为亏的情况下,全年公司最高可赢利多少,若存在,则输出多多额,若不存在,输出"Deficit"。分
2017-06-21 14:24:37 222
原创 poj1236 Network of Schools(tarjan缩点)
题意:一些学校连成了网络, 在学校之间存在某个协议:每个学校都维护一张传送表,表明他们要负责将收到的软件传送到表中的所有学校。如果A在B的表中,那么B不一定在A的表中。现在的任务就是,给出所有学校及他们维护的表,问1、如果所有学校都要被传送到,那么需要几份软件备份;2、如果只用一份软件备份,那么需要添加几条边?思路:先使用tarjan算法找强连通分量,并进行缩点。对于缩点后的图,求每个点的入度
2017-06-14 23:35:10 218
原创 poj2240 Arbitrage
鸽了好几天终于又回来写题解了。题意:N中不同的货币兑换来兑换去,看最后能不能赚钱,也就是用1软妹币能不能兑换到大于1的软妹币。思路:一种货币最多兑换的次数为n,即若有A、B、C、D四种货币的话,从A出发最长的兑换路径为A->B->C->D->A,不存在比这个更长的了。假设存在A->B->C->B->D->A这样的兑换路径,则其中存在B->C->B这条兑换路径,若其能赚钱,则问题已经得解
2017-06-12 22:26:02 204
原创 poj1157 LITTLE SHOP OF FLOWERS(dp)
题意:现在有F束花,V个花瓶,并且F那么花i必须放在花j的左边,然后每一束花插到某一个瓶子是有一个美学价值的,而且每个花瓶只能插一束花,现在要你算出怎么放,能够使美学价值最大。分析:用dp[i][j]表示编号为i到F的花插入到编号为j到V的花瓶中的最大美学价值。①对于点(i,j)如果在这个点上插入第i朵花,则i+1到F朵花只能插在j+1到V的花瓶中。②如果不插入,则编号为i到F的花可以
2017-06-08 22:55:39 218
原创 1088滑雪(dp+搜索)
很经典的一道DP,记得大一的时候就做过,算是怀旧吧。题意:找到最长的滑雪路径。分析:关键在于找到起点,你可以选择枚举起点然后搜,我大一的时候就是这么做的,但是会超时,因为在搜索过程中很多路径都被重复搜了很多遍。因此要用dp,不过这个dp还不太一样,需要用递归构成解的结构。同样为了避免重复计算,需要用到记忆化搜索的方法,这个名字有点唬人,其实就是每次递归函数执行完返回前先对其计算出来的结果进
2017-06-08 16:40:42 1030
原创 poj3267 The Cow Lexicon (dp)
题意:给出一个主串,和一本字典,问最少在主串删除多少字母,可以使其匹配到字典的单词序列。分析:从后先前推,dp[i]表示从i到mes结尾需删除的字符个数。最坏的情况是 dp[i] = dp[i+1] + 1;从i开始找与dic[]中的匹配,设 pm是mes[]的下标,如果出现从mes[i] 到 mes[pm] 这一段正好和dic[]里的一个串匹配,则 dp[i] = min(dp[
2017-06-08 15:59:57 191
原创 poj1260 Pearls (dp)
又是一道依靠别人的题解才做出来的dp,为什么要说“又”呢...233题意:给出几类珍珠,以及它们的单价,规定买任一类的珍珠n个(价格为p),都要支付(n+10)*p的钱,即额外支付10*p(什么鬼设定),低档的珍珠可以按高档珍珠的价钱买,反之不行,由于低档的按高档的买了,可以少支付低档的那10*p的钱,因此可能会比正常买便宜,现在要求算出买所有珍珠的最低价。分析:思路类似脑经急转弯,只要注
2017-06-08 15:46:08 266
原创 poj1080 Human Gene Functions (lcs变形)
题意:给定两个字符串 str1 和 str2 ,在两个串中都可以插入空格,使两个串的长度最后相等,然后开始匹配,怎样插入空格由匹配规则得到的值最大。分析:LCS的变形,dp[i][j]表示str1[1...i]和str2[1...j]两个子串的最大匹配值。与lcs类似可以分3个方向对其进行状态转移:①由dp[i-1][j-1]转移过来,意味着str1[i]和str2[j]进行匹配,新增代价
2017-06-08 15:17:31 226
原创 2017-6-8 我的第一篇博客
很久之前就有过写博客的想法,不过还是因为自己太懒,没心思码字,所以作罢。最近在准备保研机试,因此刷了不少poj上的题目。说起来很惭愧,大多是一些水题,而且其中的很多都是参考了题解(尤其是动态规划部分),刷一遍就过了,印象不是很深刻,几天不看差不多又记不得是当初怎么做的了,因此感觉需要做完一题就总结一下写个解题报告,加深印象的同时也方便自己复习。所以目前这个博客的定位还是写给自己看的,除了题解再
2017-06-08 14:08:59 292
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人