leetcode
GJWLION
这个作者很懒,什么都没留下…
展开
-
背包问题大总结-背包九讲
背包问题大总结/*0-1背包问题其中w代表i个物品的重量,v代表其价值其中n个物品其中m是背包的容量result: max(f[n][0-m])有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 wi,价值是 vi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 wi,vi,用空格隔开,分别表示第原创 2021-01-25 14:24:28 · 326 阅读 · 0 评论 -
手撕LeetCode-数组-二分查找
手撕LeetCode-数组-二分查找二分查找的模板//二分查找int search(int[]nums,int traget){ int left=0,right=nums.length-1; while(left<=right){ int mid=left+(right-left)/2; if(nums[mid]==traget){ return mid;} else if(traget<nums[mid]){ right=mid-1;} else{原创 2020-12-21 21:54:18 · 143 阅读 · 0 评论 -
手撕LeetCode 层级遍历解法
层级遍历二叉树的代码结构void traverse(TreeNode root){ if(root==null) return; Queue<TreeNode> q=new LinkedList<>(); q.offer(root); while(!q.isEmpty()){ //层级遍历代码的位置 System.out.println(root.val); /*************************/ if(cur.left!=null){原创 2020-12-17 18:20:04 · 102 阅读 · 0 评论 -
手撕LeetCode 二叉树的序列化和反序列化
扣第 297 题「二叉树的序列化与反序列化」就是给你输入一棵二叉树的根节点 root,要求你实现如下一个类:public class Codec { // 把一棵二叉树序列化成字符串 public String serialize(TreeNode root) {} // 把字符串反序列化成二叉树 public TreeNode deserialize(String data) {}}我们可以用 serialize 方法将二叉树序列化成字符串,用 deseria原创 2020-12-17 16:42:37 · 139 阅读 · 1 评论 -
手撕LeetCode-二叉树的层次遍历方法
层次遍历的题目填充每个节点的下一个右侧节点指针II(116题)方法一填充每个节点的下一个右侧节点指针II(116题)方法一主要的思想:利用二叉树转为链表的想法进行。public Node connect(Node root){ if(root==null) return root; Queue<Node> queue=new LinkedList<>(); queue.add(root); while(!queue_isEmpty()){ int levelnum原创 2020-12-15 17:04:39 · 122 阅读 · 0 评论 -
手撕LeetCode(5)二叉树系列-2 二叉树的建立
二叉树的建立操作关键思路:搞清楚根节点应该做什么,后续的事情交给前/中/序的遍历框架 。构造最大二叉树(Leetcode 654题)方法:构造出根节点。寻找最大值的索引号,索引号左边的是左子树,右边的是右子树,按照这样递规执行操作。上代码:TreeNode constructMaximumBinaryTree(int[] nums){ return build(nums,0,nums.length-1);}TreeNode bulid(int[] nums,int start,int en原创 2020-12-05 23:52:43 · 134 阅读 · 0 评论 -
手撕LeetCode(4) 二叉树系列-1
手撕LeetCode(4) 二叉树系列-1递归的真谛:明确函数的定义,利用这个定义推导最终结果。注意:细化每个操作的实现。实践1. 翻转二叉树 (leetcode 226题)题目:镜像翻转一个二叉树方法:为前序遍历,二叉树的每个节点的左右子树的交换。上代码:TreeNode invertTree(TreeNode root){ //base case if(root==null) return null; //前序遍历 //交换节点 TreeNode temp; temp=ro原创 2020-12-04 14:48:45 · 100 阅读 · 0 评论 -
手撕LeetCode(3) 判断回文单链表
判断回文单链表核心思想:从中心向两边扩展。对于判断回文串,正读和倒读的结果应该相同。其中核心的做法就是将单链表进行倒着读,大致可以分为两种方法:反转链表,其中可以参考手撕LeetCode(2)中的reverse的实现,利用三个节点。ListNode reverse(ListNode head){ ListNode pre,cur,nxt; pre=NULL; cur=nxt=head; while(nxt!=NULL){ nxt=cur.next; cur.next=pre;原创 2020-12-03 14:03:34 · 132 阅读 · 0 评论 -
手撕LeetCode(2) 递归思维:K个一组反转链表
手撕LeetCode(2)递归思维:K个一组反转链表具体问题分析问题具体实现递归思维:K个一组反转链表利用迭代的方法反转列表。具体问题分析问题反转分为两部进行。第一步:先反转以head开头的K个元素。第二步:将K+1个元素作为head进行递归调用reverseKGroup函数。最后的操作:将以上两步的结果连结在一起。注意:递归时的base case,当不足为K个的时候,就保持不变。具体实现首先实现整个链表的反转。ListNode reverse(ListNode a){原创 2020-12-02 10:04:36 · 69 阅读 · 0 评论 -
手撕Leetcode(1)
链表基础实现主要操操作为建立链表,删除节点等get(index): 获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。addAtTail(val): 将值为 val 的节点追加到链表的最后一个元素。addAtIndex(index,val): 在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾原创 2020-12-01 22:10:06 · 72 阅读 · 0 评论