这可能是B站讲的最好的数据结构算法-leetcode真题解析(2021年最新版)

作者: 图灵官方分类: 野生技能协会 发布时间: 2021-04-11 22:40:42 浏览:383155 次

这可能是B站讲的最好的数据结构算法-leetcode真题解析(2021年最新版)

小QQ的粉丝头头:
很容易想到[脱单doge] private static void reverseList(Node list) { Node prev = null; Node head = list; Node curr = list.next; Node next; while (curr != null) { next = curr.next; curr.next = prev; prev = curr; curr = next; } head.next = prev; }

【回复】这里是错的,我必须要回复下,以免引导基础差的观众:head最后肯定是指向null
【回复】回复 @许风尘 :带头指针是没问题 但是这段代码运行的结果是错误的,并没有完成链表的反转
【回复】回复 @许风尘 :2号节点的next会指向null
孝陵卫迪巴拉:
我觉得语言不同反而学的效果更好,看视频学方法然后自己用不同的语言来实现,可以加深理解

【回复】求赞,看到个谷歌和阿里大佬的Leetcode刷题笔记,笔记共 1200 页,都在这里:https://pan.baidu.com/s/17A21Msw4GmaEQgfJvvNngA 提取码:6688
【回复】https://github.com/hehanpeng/learn-go/blob/master/leetcode/test1-1/reverse_list.go 可以用go实现一遍
传奇螺旋丸大王:
跟着老师,写了个反转代码[奋斗] /** * * @param head 链表头部 * @return 返回倒序后的链表头部 */ public static ListNode iterate(ListNode head){ ListNode prev=null; ListNode next; ListNode current = head; while (current != null){ next = current.next; //保存下一个 current.next = prev; //当前连接上一个 prev = current; //将上一个后移 current = next; //将当前后移 } return prev; }

【回复】看了你的评论,我悟了[打call]
netwndyd:
这个递归时间有点长,其实递归可以从头开始,看看这个python可不可以 def reverse_linklist_r(l,p): #1 2 3 4 5 6 #2 1 3 4 5 6 #3 2 1 4 5 6 #4 3 2 1 5 6 #if l.head.next==p: # l.head.next=None if p==None: return n=p.next p.next=l.head l.head=p reverse_linklist_r(l,n)

AngelBestMing:
List Reverse(List L) { PtrToNode p; PtrToNode q; PtrToNode r; if(L==NULL) return L; p=L; q=L->Next; L->Next=NULL; while(q) { r=q->Next; q->Next=p; p=q; q=r; } L=p; return L; }

Gwing97:
;; 在LISP、Scheme下,只使用七个原始操作符实现的列表反转 ;; 用尾递归实现的列表反转函数 ;; 接受的参数为:还未反转的部分remind_list,已反转的部分rev_list (define (reverse_list_recursive remind_list rev_list) (if (atom? (cdr remind_list)) (cons (car remind_list) rev_list) (reverse_list_recursive (cdr remind_list) (cons (car remind_list) rev_list) ) ) ) ;; 列表反转函数,对外接口 (define (reverse_list list) (reverse_list_recursive list (quote ())) ) (reverse_list (quote (2 3 1 5 4 a b c))) ;; 使用示例,输出结果为: ;; > (c b a 4 5 1 3 2)

李在赣神魔恋:
指正一下up关于第36集视频中用BFS求解省份数目,其中关于内层循环的代码,if的条件判断为: if(isConnected【i】【j】 ==1 && !visited【j】){ queue.offer();} 这里其实不对的,由于第一次外层for循环中得到的i为0,假设此时的结构是0-1-2,3是独立的,那么这是的省份数应该是2。而源码中的条件会导致,0已经在队列中,那么出队,i=0,k=0,那么先找出0的一阶邻居只有1,将1入队,此时队不空,继续出队。注意此刻的i依旧等于0,而k=1,如果继续判断节点0的邻居,由于节点0的邻居1已经被访问过了,所以不在继续执行入队操作,此时队空,province++;外层for循环继续,此时i=1,出队,k=1,那么会判断到1-2即2入队,没有问题,再出队2,队列为空,province++;对于2的内层循环不会执行,因为2的邻居只有1,并且1已经被访问过了;那么直至遍历到3,因为3只是一个孤立的节点,那么入队再出队,province++。综上,province总共被加了三次,这显然是不对的。因此问题就出在内层循环的if判断语句中,只需将【i】【j】改成【k】【j】即可。

y_perpetual:
讲的很好的,也没必要去跟其他的比较。针对于了解过数据结构的,需要仔细回味老师教的内容,会很有帮助。

55421573021_bili:
为什么斐波拉契去重递归答案错误? public static int fib(int n) { int【】 arr = new int【n + 1】; return recurse(arr,n); } private static int recurse(int【】 arr,int n){ if(n == 0){ return 0; } if(n == 1){ return 1; } if(arr【n】 != 0){ return arr【n】; } arr【n】 = recurse(arr,n-1) + recurse(arr,n-2); return arr【n】; }

bili_13823952554:
假如题目可以要求不完全排列,用这个 public static int arrangeCoins(int n){ int sum=n; for(int i=1;i<=n;i++){ if (i>=sum){ return i; } sum-=i; } return 0; }

算法 程序员 学习 编程 数据结构 Java 架构师 Java面试

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

更多相关阅读