随笔分类 -  算法题思路与答案

用于记录自己所做的一些算法提的思路与代码解决方式。
摘要:题目: 思路: 本题难点:由于是整型矩阵,所以存在5*5,4*5,4*6,这种,可能出现还剩下一列或者一行或者单个的情况。 代码示例: import java.util.Arrays; public class Solution2 { public static void main(String[] 阅读全文
posted @ 2021-01-13 18:42 忧愁的chafry 阅读(71) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 本题难点:第一,三个数相乘有可能会达到数值的极限,应用long,其次,结果为两种,最大的三个数相乘或者最大的正数与最小的两个负数相乘。 代码示例: public class Solution2 { public static void main(String[] args) { in 阅读全文
posted @ 2021-01-13 18:38 忧愁的chafry 阅读(196) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 本题难点:第一,不知道链条有多大,最合起来的数可能会远大于long与int能存的极限。 思路一,将链表反转,链条反转的链表从个位数开始相加,然后取余数,不断叠成新的链表。 思路二,将链表的数据取出组合成字符串,然后利用大数相加的方法,取得相加的和,然后根据新的和的字符串生成新的链表。 阅读全文
posted @ 2021-01-13 18:37 忧愁的chafry 阅读(147) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 如图: 思路一,利用动态规划的方法,列出全部结果来寻找规律,我们发现45度下滑,如果连续相等的话我们可以做递加,不但可以得出最长的字符串数量还可以知道字符的位置。 思路二,这是我看别人提供的一种思路,通过将一个字符串截取部分,然后判断是否在另一个字符串中,然后不断偏移直至全部比对完, 阅读全文
posted @ 2021-01-13 18:36 忧愁的chafry 阅读(107) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 由于这是一个链表,所以我们一般只能获取到一个头结点,然而其他信息我们不确定。所以可以采用双指针的方法。 思路一,利用一个指针获取整个链表元素的总数,利用总数减去目标数,所以我们可以确定要删除的位置。 思路二,利用一个指针先走出目标数目,然后两个指针一起走,那么先走的指针走完时,第二个 阅读全文
posted @ 2021-01-13 18:35 忧愁的chafry 阅读(131) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 首先画个图出来,假设有两个指针指向头结点 p1与p2,那么当p1走一步,而p2走两步,如果存在圆,那么必然会出现,p1与p2同时落在C处(即重合点)。故此时链表有环。 其次,题目要求我们取出入口节点,由上可知, 假设 链表头到环入口AB长度为——a, 环入口到相遇点BC长度为——b, 阅读全文
posted @ 2021-01-13 18:34 忧愁的chafry 阅读(71) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 首先我们要确定进行转换的数的可能性为三种,即负数,正数与0; 其次十进制以上的转化情况。例:11进制中,10用A表示, 然后最后考虑到的是获取进制数的顺序 代码示例: import java.util.Stack; public class Solution4 { public st 阅读全文
posted @ 2020-12-30 14:24 忧愁的chafry 阅读(57) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 首先明确了这个可以在一次循环中解决即时间复杂度为O(n) 其次,在循环中,我们应能知道起始的位置,然后终止于哪个位置,当碰到终止的时候必然是元素为已经纳入我们统计中的元素。然后我们要如何确认这个元素在哪个位置,并且把一些废弃的元素丢弃掉,重新到下一次统计,直至目标数组遍历完全。 所以 阅读全文
posted @ 2020-12-30 14:22 忧愁的chafry 阅读(131) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 解法用了三种: 1,采用搭建小顶堆的方式通过把节点塞入堆内自动排序,然后取出最小值,直至堆内为空,元素加入堆中的时间复杂度为O(longk),总共有kn个元素加入堆中,因此,时间复杂度是O(nklogk),空间复杂度的话是O(K),因为堆内存放数据量是根据有多少个链表来的 2,链表1 阅读全文
posted @ 2020-12-30 14:12 忧愁的chafry 阅读(249) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 解法有两种: 1,顺序排序,需要额外创建一个数组大小为m+n,然后比较A与B,遍历填充进新数组。然后把数组再次填充回A里面,所以次数为2*(m+n),当m+n趋于无穷大时,2就被忽略了,时间复杂度为O(m+n),空间复杂度为O(m+n) 2,对于第一种方法如果要优化的点可以从空间开始 阅读全文
posted @ 2020-12-30 14:11 忧愁的chafry 阅读(248) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 先是说一说对这道题的理解吧,这题要么采用的是暴力破解方法,采用双循环的方式。 通过一层循环,决定起始位置,然后不断循环从起始位置加起用于存储最大值。 或者采用动态规划,寻找出规律F(N) = F(N-1) + A[N] 这种方法的时间复杂度为O(N),空间复杂度为O(N)。 代码示例 阅读全文
posted @ 2020-12-23 15:12 忧愁的chafry 阅读(62) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 先是说一说对这道题的理解吧,常规的容器的容量是由最短的边决定的,所以应该取左右两边的最短边减去底高就是容量,所以理想状态是将数组遍历一次,知道每一个低是否有容量,例如L与R是容器的两边,且L比R小,故L决定了容量,设X为容器底,则L-X,会出现两种情况,一是整数,则可以知道容量是多少 阅读全文
posted @ 2020-12-23 15:11 忧愁的chafry 阅读(232) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 先是说一说对这道题的理解吧,对于数字运算,我们大都知道int是存在范围的,long也是有范围的,但是当面对数值超出范围的时候我们要怎么应对,大概就是这题的一个知识点吧。 其次这题也很明显存在暴力破解的办法,就是将两个字符串的一位取出,进行转义相加,然后存在进位情况。依次处理最后达到了 阅读全文
posted @ 2020-12-23 15:09 忧愁的chafry 阅读(100) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 由于set和get方法的时间复杂度为O(1),这就代表着不好用循环,所以应该采用能一次性取出来的方式。如头尾这种方便存取,所以应该一边常用,一边不常用,整体来说,链表结构比较合适。 直接把每次操作的元素塞到链表最末端,这样最后一位就是最常用的,其次,还要想着如何便于一次性检验元素是否 阅读全文
posted @ 2020-12-23 15:08 忧愁的chafry 阅读(159) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: * 通过哈希map的key-value的方式来进行甄别,时间与空间复杂度都为O(N) * 将每次检验过的值的补数存于map中key为补数,value存数组的index坐标 * 当新元素进入时,判断map的key中是否已经存在这个key了,如果存在,则将这个key对应的坐标拿出 * 并 阅读全文
posted @ 2020-12-23 15:07 忧愁的chafry 阅读(57) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 思路一:其实一看到这个题我们首先会想到递归,其中比较绕的就是 new_list = l1; new_list.next = mergeTwoLists2(l1.next, l2); 这点代码,原因是他取出一个值小的节点,并改变了他的下一位节点的指向。 如A->C->E与B->D->F 阅读全文
posted @ 2020-12-23 15:05 忧愁的chafry 阅读(86) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 思路一:由于是有序的链表,所以按一定的顺序,例如从小到大,这样的话,将第一个A节点的值存于一个变量temp之中,设第一个节点为A(head),第二个节点为B(head.next),第三个节点为C(head.next.next),这样如果B的值与A相同,则就是要去掉的,即head.ne 阅读全文
posted @ 2020-12-23 14:31 忧愁的chafry 阅读(952) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 思路一:直接利用快速排序的方法对数组进行排序,时间复杂度为O(NlogN),简单便捷,排完序之后便是有序的数组,直接去前K个数出来 思路二:根据一次快排(Partition)的想法,我们知道一次随机快速排序可以确定一个有序的位置,这个位置的左边都小于这个数,右边都大于这个数,我们如果 阅读全文
posted @ 2020-12-10 17:12 忧愁的chafry 阅读(73) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 斐波那契数列的核心就是F(N) = F(N-1) + F(N-2),一般看到的都会采用递归,但是如果使用循环来实现且进行对比,容易发现不少对真是性能的影响 如上面的采用循环运行时间大大的小于下面用递归实现的运行时间。这种有点类似于插入排序算法的不同实现,每次都换位置的话效率如同冒泡, 阅读全文
posted @ 2020-12-10 17:10 忧愁的chafry 阅读(127) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 操作一:定义了两个变量来记录,A一个一次走一步,B一个一次走两步,如果有环B必然会追上A。如果无环B必然会先遍历完。 操作二:定义了一个哈希集合来记录节点指针的哈希值,因为java中对于这8种基本数据类型的变量,变量直接存储的是“值”。而对于非基本数据类型的变量,在一些书籍中称作为 阅读全文
posted @ 2020-12-10 17:09 忧愁的chafry 阅读(89) 评论(0) 推荐(0) 编辑