![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
Baibair
这个作者很懒,什么都没留下…
展开
-
算法:切披萨的方案数,3ms解决方案
题目描述这是leetcode第1444题。给你一个 rows x cols 大小的矩形披萨和一个整数 k ,矩形包含两种字符: 'A'(表示苹果)和 '.'(表示空白格子)。你需要切披萨 k-1 次,得到 k 块披萨并送给别人。切披萨的每一刀,先要选择是向垂直还是水平方向切,再在矩形的边界上选一个切的位置,将披萨一分为二。如果垂直地切披萨,那么需要把左边的部分送给一个人,如果水平地切,那么需要把上面的部分送给一个人。在切完最后一刀后,需要把剩下来的一块送给最后一个人。请你返回确保每一块披萨包含 至少原创 2020-11-18 11:07:32 · 1019 阅读 · 0 评论 -
算法:环路检测,求链表回环入口
题目给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。题目分析解这道题,分为两个部分,第一是确定是否是有环链表,第二是如果有环,返回回环的开头节点第一个问题我们可以使用快慢指针的方法,即两个指针遍历链表,一个快一些(一次移动两个节点),一个慢一些(一次移动一个节点),如果无环,那么快指针会率先到达终点,如果有环,则快慢指针一定会相遇。第二个问题我先给出结论,在两个指针相遇后,使一个指针从相遇点出发,另一个从链表头节点出发,最后相遇的节点就是开头节点。证明如上图,我们取头节点原创 2020-11-13 19:29:32 · 292 阅读 · 0 评论 -
算法:生成窗口最大值数组
题目描述有一个整型数组arr和一个大小为w的窗口从数组的最左边划到最右边,窗口每次向右滑动一个位置如数组为[4,5,8,2],窗口大小为2时[4 5] 8 2 最大值是54 [5 8] 2 最大值是84 5 [8 2] 最大值是8数组长度为n窗口大小为w,则一共产生n-w+1个窗口最大值输入:整型数组arr,窗口大小w输出:一个长度为n-w+1的数组res,res[i]表示每种窗口状态下的最大值,上例应返回[5, 8, 8]。题目分析可以先把初始窗口的最大值记录下来,每次向右移动一个原创 2020-10-03 14:04:28 · 322 阅读 · 0 评论 -
算法:仅用递归函数和栈操作逆序一个栈
题目一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1,将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构分析可以用两个递归函数int getAndRemoveLastElement(Stack stack)这个函数的作用是:获取并移出这个栈的栈底元素。这个函数实现分情况,当栈只有一个元素时,弹出的栈顶元素即为栈底元素,当多于一个元素时,先弹出栈顶元素,使得栈的size减少,然后对该栈取栈底元素(递归),原创 2020-09-27 13:56:27 · 228 阅读 · 0 评论 -
算法:设计一个有getMin功能的栈
题目实现一个特殊的栈,在实现栈的基本功能上,再实现返回栈中最小元素的操作。分析可以使用两个栈,一个占当普通的栈stackData进行操作,另一个栈stackMin用于保存最小值(这个栈的元素大小从栈底到栈顶依次减小,当最小的弹出后次小值就成了zui小值)。压入数据时数据压入stackData,然后stackMin判断是否为空或者数据小于等于stackMin栈顶元素,如果为真,则压入stackMin,否则不作任何操作。弹出数据时stackData正常弹出,然后看这个值是否等于stackMin栈顶原创 2020-09-27 12:57:23 · 139 阅读 · 0 评论 -
算法题:连续子数组的最大和,分析过程(动态规划)
题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)题目分析记下标0到i的子向量最大和为ans[i],subR原创 2020-09-13 17:44:49 · 238 阅读 · 0 评论 -
算法题:数组中出现超过一半的数字 题目分析
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。题目分析由于出现某个数字a,占数组超过了一半,若数字a与其他数字相互抵消,至少也能剩下1个数字a,所以可以采用这样的方法:先记住第一个数字,初始化一个count,后面遍历如果是相同的数字就使count增加(相同数字叠加),若不同则count减少(不同数字相互抵消),如果count变为0,原创 2020-09-13 17:21:17 · 344 阅读 · 0 评论