摘要: 题目: 思路: 解法用了三种: 1,采用搭建小顶堆的方式通过把节点塞入堆内自动排序,然后取出最小值,直至堆内为空,元素加入堆中的时间复杂度为O(longk),总共有kn个元素加入堆中,因此,时间复杂度是O(nklogk),空间复杂度的话是O(K),因为堆内存放数据量是根据有多少个链表来的 2,链表1 阅读全文
posted @ 2020-12-30 14:12 忧愁的chafry 阅读(246) 评论(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 阅读(237) 评论(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 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 题目: 思路: 先是说一说对这道题的理解吧,对于数字运算,我们大都知道int是存在范围的,long也是有范围的,但是当面对数值超出范围的时候我们要怎么应对,大概就是这题的一个知识点吧。 其次这题也很明显存在暴力破解的办法,就是将两个字符串的一位取出,进行转义相加,然后存在进位情况。依次处理最后达到了 阅读全文
posted @ 2020-12-23 15:09 忧愁的chafry 阅读(95) 评论(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 阅读(932) 评论(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 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 题目: 思路: 操作一:定义了两个变量来记录,A一个一次走一步,B一个一次走两步,如果有环B必然会追上A。如果无环B必然会先遍历完。 操作二:定义了一个哈希集合来记录节点指针的哈希值,因为java中对于这8种基本数据类型的变量,变量直接存储的是“值”。而对于非基本数据类型的变量,在一些书籍中称作为 阅读全文
posted @ 2020-12-10 17:09 忧愁的chafry 阅读(87) 评论(0) 推荐(0) 编辑
摘要: 题目: 思路: 这从该题观察可以的得出需要 一 一 对应匹配且({)}这种是不符合的,所以根据栈的先进后出的方式,凡是碰到一个左边的括号就自动将右边的括号放进一个栈内,等碰到不是左边的括号的时候就进行比对,看两个右边的括号是否相等,如果不等则顺序不符合,且到了最后顺便检查一下栈是否用空了,没有用空就 阅读全文
posted @ 2020-12-10 17:07 忧愁的chafry 阅读(56) 评论(0) 推荐(0) 编辑
摘要: 题目: 思路: 遍历法 操作: 准备两个空节点pre与next 判断当前的头结点是否为空,若不为空进入循环 将头结点的下一节点取出赋值给next节点 然后将头结点的下一节点指向pre(然后将当前头结点的指赋值给pre,因为java没有指针,这种赋值的方式不会改变内部的指针指向,即head的操作实际第 阅读全文
posted @ 2020-12-10 17:05 忧愁的chafry 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 题目: 思路: 做这种题目其实可以考虑动态规划算法,即将大问题化解成小问题,将小问题的答案拼凑起来就是正确的答案了。其实跳的步伐有两种,即 F(N)= F(N-1)+F(N-2) ..... F(3) = F(2)+F(1) F(2) = 2 F(1) = 1 所以考虑递归会更好一点。即不断代入,直 阅读全文
posted @ 2020-11-20 17:45 忧愁的chafry 阅读(119) 评论(0) 推荐(0) 编辑