Last updated on 2023年9月24日 下午
148. 排序链表(Java实现) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 class Solution { public ListNode sortList(ListNode head) { if (head == null ){ return head; } List<ListNode> keep = new ArrayList<>(); ListNode node = head; while (node != null ){ keep.add(new ListNode(node.val)); node = node.next ; } Collections.sort (keep, new Comparator<ListNode>(){ @Override public int compare(ListNode n1, ListNode n2){ return n1.val - n2.val; } }); ListNode resultNode = new ListNode(0 ); ListNode p = resultNode; for (int i = 0 ;i < keep.size ();i++){ p.next = keep.get(i); p = p.next ; } return resultNode.next ; } }
23. 合并 K 个升序链表(Java实现) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 class Solution { public ListNode mergeTwoList(ListNode n1 , ListNode n2 ) { ListNode p1 = n1; ListNode p2 = n2; ListNode resultNode = new ListNode(0) ; ListNode node = resultNode; while (p1 != null && p2 != null){ if (p1.val < p2.val ){ node.next = new ListNode(p1 .val ) ; p1 = p1.next; }else { node.next = new ListNode(p2 .val ) ; p2 = p2.next; } node = node.next; } while (p1 != null){ node.next = new ListNode(p1 .val ) ; p1 = p1.next; node = node.next; } while (p2 != null){ node.next = new ListNode(p2 .val ) ; p2 = p2.next; node = node.next; } return resultNode.next; } public ListNode mergeKLists(ListNode[] lists ) { int length = lists.length; if (length == 1 ){ return lists[0 ] ; } if (length == 0 ){ return null; } ListNode tmp = new ListNode(0) ; tmp = mergeTwoList(lists [0], lists [1]) ; for (int i = 2 ;i < length;i++){ tmp = mergeTwoList(tmp , lists [i ]) ; } return tmp; } }
146. LRU 缓存(Java实现) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 class LRUCache { class LinkedNode { int key; int value ; LinkedNode prev; LinkedNode next; public LinkedNode () { } public LinkedNode (int key, int value ) { this .key = key; this .value = value ; } } public Map<Integer, LinkedNode> keep = new HashMap<>(); public int size; public int capacity; public LinkedNode head; public LinkedNode tail; public LRUCache (int capacity ) { this .capacity = capacity; this .size = 0 ; head = new LinkedNode(); tail = new LinkedNode(); head.next = tail; tail.prev = head; } public void addToHead (LinkedNode node ) { node.prev = head; node.next = head.next; head.next.prev = node; head.next = node; } public void removeNode (LinkedNode node ) { node.prev.next = node.next; node.next.prev = node.prev; } public void moveToHead (LinkedNode node ) { removeNode(node); addToHead(node); } public LinkedNode removeTail () { LinkedNode node = tail.prev; removeNode(node); return node; } public int get (int key ) { LinkedNode node = keep.get (key); if (node == null ){ return -1 ; } moveToHead(node); return node.value ; } public void put (int key, int value ) { LinkedNode node = keep.get (key); if (node == null ){ LinkedNode newNode = new LinkedNode(key, value ); size++; keep.put(key, newNode); addToHead(newNode); if (size > capacity){ LinkedNode tailNode = removeTail(); keep.remove (tailNode.key); size--; } }else { node.value = value ; moveToHead(node); } } }
94. 二叉树的中序遍历(Java实现) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 /** * Definition for a binary tree node. * public class TreeNode { * int val ; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val ) { this.val = val ; } * TreeNode(int val , TreeNode left, TreeNode right) { * this.val = val ; * this.left = left; * this.right = right; * } * } */ class Solution { List< Integer> result = new ArrayList<> (); public void inorder(TreeNode node){ if (node == null ){ return ; } inorder(node.left); result.add(node.val ); inorder(node.right); } public List< Integer> inorderTraversal(TreeNode root) { result.clear(); inorder(root); return result; } }
104. 二叉树的最大深度(Java实现) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 class Solution { public int getDepth(TreeNode node ) { if (node == null){ return 0 ; } int leftDepth = getDepth(node .left ) ; int rightDepth = getDepth(node .right ) ; int maxDepth = Math . max(leftDepth, rightDepth) + 1 ; return maxDepth; } public int maxDepth(TreeNode root ) { if (root == null){ return 0 ; } return getDepth(root ) ; } }
226. 翻转二叉树(Java实现) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left ; * TreeNode right ; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left , TreeNode right ) { * this.val = val; * this.left = left ; * this.right = right ; * } * } */ class Solution { public TreeNode invertTree(TreeNode root) { if (root == null){ return root; } //交换左右结点 TreeNode tmp = root.left ; root.left = root.right ; root.right = tmp; invertTree(root.left ); invertTree(root.right ); return root; } }
leetcode-hot-100-20230924
https://thewangyang.github.io/2023/09/24/leetcode-hot-100-20230924/