From b4541479c4148d13f44ca3aa10e9d45302bc0c6d Mon Sep 17 00:00:00 2001 From: jessica <604284275@qq.com> Date: Fri, 28 Aug 2020 23:12:22 +0800 Subject: [PATCH 01/16] [Leetcode-1] array complete --- .../name/zicat/leetcode/array/ArrayUtils.java | 508 ++++++++++++++++++ .../name/zicat/leetcode/array/LRUCache.java | 147 +++++ .../name/zicat/leetcode/array/ListNode.java | 7 + .../java/name/zicat/leetcode/array/Node.java | 13 + .../name/zicat/leetcode/queue/Deques.java | 11 + .../zicat/leetcode/queue/PriorityQueue.java | 15 + .../java/name/zicat/leetcode/queue/Queue.java | 61 +++ .../leetcode/recursion/RecursionUtil.java | 135 +++++ .../zicat/leetcode/search/SearchUtil.java | 29 + .../java/name/zicat/leetcode/stack/Stack.java | 63 +++ .../name/zicat/leetcode/tree/TreeUtils.java | 50 ++ 11 files changed, 1039 insertions(+) create mode 100644 src/main/java/name/zicat/leetcode/array/LRUCache.java create mode 100644 src/main/java/name/zicat/leetcode/array/ListNode.java create mode 100644 src/main/java/name/zicat/leetcode/array/Node.java create mode 100644 src/main/java/name/zicat/leetcode/queue/Deques.java create mode 100644 src/main/java/name/zicat/leetcode/queue/PriorityQueue.java create mode 100644 src/main/java/name/zicat/leetcode/queue/Queue.java create mode 100644 src/main/java/name/zicat/leetcode/recursion/RecursionUtil.java create mode 100644 src/main/java/name/zicat/leetcode/search/SearchUtil.java create mode 100644 src/main/java/name/zicat/leetcode/stack/Stack.java create mode 100644 src/main/java/name/zicat/leetcode/tree/TreeUtils.java diff --git a/src/main/java/name/zicat/leetcode/array/ArrayUtils.java b/src/main/java/name/zicat/leetcode/array/ArrayUtils.java index 5db218b..e473f05 100644 --- a/src/main/java/name/zicat/leetcode/array/ArrayUtils.java +++ b/src/main/java/name/zicat/leetcode/array/ArrayUtils.java @@ -1,12 +1,42 @@ package name.zicat.leetcode.array; +import sun.misc.OSEnvironment; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; + /** * @author zhangjun * Date 2020/7/29 */ public class ArrayUtils { + public static void main(String[] args) { + + /* ListNode listNode1 = new ListNode(1); + ListNode listNode2 = new ListNode(2); + ListNode listNode3 = new ListNode(3); + ListNode listNode4 = new ListNode(4); + ListNode listNode5 = new ListNode(5); + listNode1.next = listNode2; + listNode2.next = listNode3; + listNode3.next = listNode4; + listNode4.next = listNode5; + + removeNthFromEnd(listNode1,2);*/ + int[] sum = {1,1,1,2,2,3}; + int len = removeDuplicateN2(sum); + for(int i=0;i< len;i++){ + System.out.println(sum[i]); + } + + + + //subArraySumK(sum,2); + } + /** * https://leetcode-cn.com/problems/median-of-two-sorted-arrays/ * @param a @@ -118,4 +148,482 @@ public static final int countInAscendingOrderArrayLessThenK(int[] a, int offset, public static final int countInAscendingOrderArrayLessThenK(int[] a, int k) { return countInAscendingOrderArrayLessThenK(a, 0, a.length, k); } + + /** + * https://leetcode-cn.com/problems/move-zeroes + * move 0 to the end of array, + * inputs [0,1,0,3,12] + * outputs[1,3,12,0,0] + * + * @return + */ + public static final int[] moveZeroes (int[] nums){ + /** + * 记录下一个非0元素的位置 + */ + int j=0; + for (int i=0;i< nums.length;i++) { + /** + * 不是 0的话 把元素 放到 j的位置 + */ + if(nums[i]!=0){ + + nums[j] = nums[i]; + /** + * i!=j的话 说明 有 0的元素,那当前的 i的位置 放0 + */ + if(i!=j){ + nums[i] =0; + } + /** + * j指针+1 + */ + j++; + } + } + + return nums; + } + + /** + * 209长度最小的子数组. 子数组中的值累加 必须 >n. + */ + public static final int minLengthArray(int[] nums, int n){ + + int first =0; + + int second = -1; + + int minLen =Integer.MAX_VALUE; + + int subArraySum =0; + + + while(first < nums.length ){ + subArraySum = subArraySum + nums[first]; + + if(subArraySum >= n){ + int len = first - second; + if(minLen > len){ + minLen = len; + } + + second ++; + subArraySum = subArraySum - nums[second]-nums[first]; + } else { + + first ++; + } + + } + + if(minLen !=Integer.MAX_VALUE){ + return minLen; + } else { + return 0; + } + } + + public static int minSubArrayLen(int s, int[] nums) { + if (nums == null || nums.length == 0) { + return 0; + } + + int result = Integer.MAX_VALUE; + int start = -1, i = 0, localSum = 0; + + while (i < nums.length) { + localSum += nums[i]; + /** + * 窗口 滑动的方法,直到 比 + */ + while (localSum >= s && start < i){ + result = Math.min(result, i - start); + localSum -= nums[++start]; + } + i++; + } + + return result == Integer.MAX_VALUE ? 0 : result; + } + + + /** + * 26.删除排序数组中的重复项 + */ + public static int removeDuplicate(int[] nums) { + int i=0; + int j=0; + + while( i< nums.length) { + + if(nums[i] == nums[j]){ + i++; + } else { + ++j; + nums[j] = nums[i]; + i++; + } + + } + + return j+1; + } + + /** + * 560.和为K的子数组 + * sub[1,3] =sub[4]-sub[1] + * subSum[i,j] =preSum[j+1] - preSum[i] + * + * input [1,1,1] 2 + * + * output [1,1] [1,1] 2 + * + * 想办法判断它的值减去K的值是否存在于前缀和数组中即可。 + */ + + public static int subArraySumK(int[] nums,int k) { + int n = nums.length; + int result =0; + + int[] preSum = new int[n+1]; + + int sum =0; + + for(int i=0;i< n;i++){ + preSum[i] =sum; + sum +=nums[i]; + + } + + preSum[n] =sum; + + + /** + * 想办法判断它的值减去K的值是否存在于前缀和数组中即可 + */ + + HashMap hashMap=new HashMap(); + + for(int preSubSum: preSum){ + if(hashMap.containsKey(preSubSum-k)){ + result = result + hashMap.get(preSubSum-k); + } + + hashMap.put(preSubSum, hashMap.getOrDefault(preSubSum,0)+1); + } + + return result; + + /* for(int i=0;i<=n;i++){ + + for(int j= i+1;j<=n ;j++){ + if(preSum[j]- preSum[i] ==k){ + result ++; + } + + } + + } + + return result; +*/ + + } + + + /** + * 25.以k个节点为一组进行翻转 + * 链表 1->2->3->4->5 + * + * k=2 返回 2->1->4->3->5 + * + * k =3 返回 3->2->1->4->5 + * + * 如果 节点不是 k的整数倍,最后剩余的节点保持原有顺序 + * + * fakehead带队人 新链表的第一个元素 + * + * + */ + + public static ListNode reverseKGroup(ListNode head, int k){ + /** + * 定义带队人 + */ + + ListNode fakeHead = new ListNode(0); + fakeHead.next = head; + + ListNode prev = fakeHead; + + int count=0; + /** + * 先 获取 k个元素 + */ + ListNode end = head; + while(end!=null){ + count++; + if(count%k !=0){ + end = end.next; + continue; + } + /** + * 获取k个元素的 头和 尾进行翻转 + */ + prev = reverseLinkedList(prev,end.next); + /** + * 翻转后 第一个节点 是最后一个了,end指向 翻转后最后的节点 + */ + end = prev.next; + } + + return fakeHead.next; + + } + + /** + * 链表反转 + * prev是反转后的前一个节点 + * + * next是反转后的 后一个节点 + * @param prev + * @param next + * @return + */ + public static ListNode reverseLinkedList(ListNode prev,ListNode next){ + /** + * 带队人 prev 插入到 后面 节点的是 current + */ + /** + * last是 current的前一个节点,last最终指向反转好的头节点 + */ + ListNode last = prev.next; + + ListNode cur= last.next; + + /** + * current 把节点 插到 带对人的后面 + * pre-> last(该节点最终变成 last节点)- current-temp + * + * 1. 先把 current的 next节点先保存 + * + * 2.current的 next节点变成 prev的 后面的节点 + * + * 3.prev的next的节点变成 current + * + * 4.last的next变成 temp + */ + while(cur!=next){ + ListNode temp = cur.next; + cur.next = prev.next; + prev.next = cur; + last.next = temp; + cur= temp; + } + return last; + } + + + /** + * 328.奇偶链表 节点编号的奇偶 + * input 1->2->3->4->5->NULL + * output 1->3->5->2->4->NULL + * + * input 2->1->3->5->6->4->7->NULL + * output 2->3->6->7->1->5->4->NULL + * + * 用原地算法 即用 带头人来做 + */ + public static ListNode oddEvenList(ListNode head) { + + if(head == null){ + return null; + } + + ListNode odd = head; + + ListNode even = head.next; + /** + * 偶数的带头人 + */ + ListNode evenHead = even; + + /** + * even偶数一定是 先 遍历完的 + */ + while(even!=null && even.next!=null){ + /** + * 奇数index的下一个节点 是 偶数index的下一个节点 + */ + odd.next =even.next; + /** + * odd index移到 后一个odd index节点 + */ + odd = odd.next; + /** + * 同理 偶数的 index下一个节点是 奇数的next + */ + even.next = odd.next; + /** + * even index移到 后一个 even节点 + */ + even = even.next; + } + + /** + * 奇数 连接 偶数的head + */ + odd.next = evenHead; + return head; + } + + + /** + * 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点 + */ + + public static ListNode removeNthFromEnd(ListNode head,int n ){ + + ListNode findnode =null ; + ListNode findnodePre = null; + ListNode end = head; + ListNode temp = null; + int count =0; + while (end != null){ + count ++; + end = end.next; + if(count == n){ + findnode = head; + + } else if(count > n){ + temp = findnode; + findnodePre = temp; + findnode = temp.next; + } + } + + //删除元素 + + if(findnodePre!=null) { + findnodePre.next = findnode.next; + return head; + } else { + return findnode.next; + } + + } + + /** + * 删除 排序数组中的重复项,使得每个元素 最多出现2次 + * nums = [1,1,1,2,2,3] + * + * + */ + + public static int removeDuplicateN2(int[] nums){ + // + // Initialize the counter and the second pointer. + // + int j = 1, count = 1; + + // + // Start from the second element of the array and process + // elements one by one. + // + for (int i = 1; i < nums.length; i++) { + + // + // If the current element is a duplicate, increment the count. + // + if (nums[i] == nums[i - 1]) { + + count++; + + } else { + + // + // Reset the count since we encountered a different element + // than the previous one. + // + count = 1; + } + + // + // For a count <= 2, we copy the element over thus + // overwriting the element at index "j" in the array + // + if (count <= 2) { + nums[j++] = nums[i]; + } + } + return j; + } + + /** + * 删除 排序链表中的重复项 + * input [1->2->3->3->4->4->5] + * output [1->2->5] + */ + + public static ListNode deleteDuplicates(ListNode head) { + + ListNode dummpy = new ListNode(-1); + dummpy.next = head; + ListNode first = dummpy; + ListNode second = head; + + + + while(second!=null &&second.next !=null){ + /** + * 如果不相等 两个指针 都 往后 走 + */ + if(first.next.val!=second.next.val){ + first = first.next; + second = second.next; + } + /** + * 如果相等,second往后走 直到 不相等为止,不相等后 first next指正 指向 second + */ + else { + while(second!=null && second.next!=null&& first.next.val==second.next.val){ + second = second.next; + } + first.next = second.next; + second = second.next; + } + + } + return dummpy.next; + + } + + /** + * 42 + */ + + + /** + * 80 + */ + + /** + * 19 + * + * + */ + + /** + * 82 + */ + + /** + * + * 1171 + */ + + + + } diff --git a/src/main/java/name/zicat/leetcode/array/LRUCache.java b/src/main/java/name/zicat/leetcode/array/LRUCache.java new file mode 100644 index 0000000..c66e2ca --- /dev/null +++ b/src/main/java/name/zicat/leetcode/array/LRUCache.java @@ -0,0 +1,147 @@ +package name.zicat.leetcode.array; + +import java.util.HashMap; + +/** + * 146. + * LRU,最近最少使用缓存机制 + * 1.固定大小,限制内存占用 + * 2. 插入和查找的效率要高, 最好是O(1) + * 3. 缓存超过界限后删除不常用的 + * + * HashMap + 双链表来实现 + * HashMap保存 key和数据的地址,双链表保存数据的值 + * 最近更新的数据 存在双链表的 链表头 + * + * put操作 没超过容量的情况下 put存在双链表的头 + * + * 容量变小的话, remove end 并且 setHeader + * + * Get操作 + * get K3,并把该值移到 链表的头 + * + *获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。 + * 写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。 + * + * 首先插入删除两个操作都需要在O(1)O(1)的时间复杂度中完成,根据这点就已经排除了选择数组来作为存储结构的可能,基本的方向就是使用链表。 + * + * 然后使用单链表双链表其实都可以,只是若使用单链表的话,需要通过前驱来访问目标结点才能够进行删除/插入操作,不太直观,所以我更推荐使用双链表。 + * + * 但是链表仍有存在一个问题,访问某个元素不能做到O(1)O(1),即不支持随机访问。为此,可以结合哈希表进行辅助。因为出现key冲突的情况,按照题目要求只需要进行值的覆盖,所以哈希表处理冲突的方式只需要覆盖原值,故随机访问的速度不会退化,一直是O(1)O(1)。 + * + * 作者:beney-2 + * 链接:https://leetcode-cn.com/problems/lru-cache/solution/lruhuan-cun-ji-zhi-by-beney-2/ + * 来源:力扣(LeetCode) + * 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 + */ +public class LRUCache { + /** + * key + * value ,Node的地址 + */ + HashMap map = new HashMap<>(); + + int capacity =0; + /** + * 头节点插入 + * + * 尾节点删除 + */ + Node head =null; + Node end = null; + + public LRUCache(int capacity){ + this.capacity = capacity; + } + + /** + * get 操作 + * @param key + * @return + */ + public int get(int key){ + if(map.containsKey(key)){ + Node node = map.get(key); + //链表中 去掉 当前节点,并且 移到链表头 + remove(node); + setHeader(node); + return node.value; + } else { + return -1; + } + + } + + + /** + * put 操作 + * @param key + * @param value + */ + public void put(int key,int value){ + //存在该节点 + if(map.containsKey(key)){ + Node node = map.get(key); + //更新 改node节点 value的值 + node.value = value; + remove(node); + setHeader(node); + //不存在 该节点 + } else { + Node newNode = new Node(key,value); + //判断 map的大小是否超过 capacity + if(map.size() >= capacity){ + //删掉最后的节点 key和 node + map.remove(end.key); + remove(end); + } + // + setHeader(newNode); + map.put(key,newNode); + } + } + + /** + * reset 双链表的头节点,容易丢指针, + * @param node + */ + private void setHeader(Node node) { + /** + * 看不懂 + */ + node.pre = null; + node.next = head; + if( head!=null){ + head.pre = node; + } + + head = node; + if(end == null) end = head; + + } + + /** + * 删除 双链表的 节点 + * @param node + */ + private void remove(Node node) { + + /** + * 头节点和尾节点的特殊处理 + */ + if(node.pre ==null){ + head = node.next; + } else { + node.pre.next = node.next; + } + + if(node.next == null){ + end = node.pre; + } else { + node.next.pre = node.pre; + } + } + + + +} diff --git a/src/main/java/name/zicat/leetcode/array/ListNode.java b/src/main/java/name/zicat/leetcode/array/ListNode.java new file mode 100644 index 0000000..627dbe5 --- /dev/null +++ b/src/main/java/name/zicat/leetcode/array/ListNode.java @@ -0,0 +1,7 @@ +package name.zicat.leetcode.array; + +public class ListNode { + int val; + ListNode next; + ListNode(int x) { val = x;} +} diff --git a/src/main/java/name/zicat/leetcode/array/Node.java b/src/main/java/name/zicat/leetcode/array/Node.java new file mode 100644 index 0000000..e7a5d1a --- /dev/null +++ b/src/main/java/name/zicat/leetcode/array/Node.java @@ -0,0 +1,13 @@ +package name.zicat.leetcode.array; + +public class Node { + int key; + int value; + Node pre; + Node next; + + public Node(int key, int value){ + this.key =key; + this.value = value; + } +} diff --git a/src/main/java/name/zicat/leetcode/queue/Deques.java b/src/main/java/name/zicat/leetcode/queue/Deques.java new file mode 100644 index 0000000..973d5df --- /dev/null +++ b/src/main/java/name/zicat/leetcode/queue/Deques.java @@ -0,0 +1,11 @@ +package name.zicat.leetcode.queue; + +/** + * 1.两边都开口的队列 + * + * 2. 支持从队列前端删加 + * + * 3. 支持从队列后端删加 + */ +public class Deques { +} diff --git a/src/main/java/name/zicat/leetcode/queue/PriorityQueue.java b/src/main/java/name/zicat/leetcode/queue/PriorityQueue.java new file mode 100644 index 0000000..5af389e --- /dev/null +++ b/src/main/java/name/zicat/leetcode/queue/PriorityQueue.java @@ -0,0 +1,15 @@ +package name.zicat.leetcode.queue; + +/** + * 优先队列 + * + * 1.元素被赋予优先级,优先级高的元素先被访问 + * + * 2.int 类型弄人 最大值优先级高 + * + * 3.可以自定义优先级 + * + * 4.基于堆实现的优先队列的插入复杂度是O(logN) + */ +public class PriorityQueue { +} diff --git a/src/main/java/name/zicat/leetcode/queue/Queue.java b/src/main/java/name/zicat/leetcode/queue/Queue.java new file mode 100644 index 0000000..3f541c6 --- /dev/null +++ b/src/main/java/name/zicat/leetcode/queue/Queue.java @@ -0,0 +1,61 @@ +package name.zicat.leetcode.queue; + +/** + * 先进先出的数据结构 + * + * 从 尾部 追加,头部 取出 + */ +public class Queue { + + private static class QueueNode { + private T data; + private QueueNode next; + + public QueueNode(T data){this.data = data} + } + + private QueueNode first; + private QueueNode last; + + /** + * 从队首取出元素 + * @return + */ + public T remove(){ + if(first == null) throw EmptyQueueException(); + + T value = first.data; + first = first.next; + + /** + * 如果只有一个元素,取出来就空了,需要把 last也设置成 null + */ + if(first == null) last =null; + return value; + } + + /** + * 加元素 + */ + + public void add(T item) { + QueueNode node = new QueueNode(item); + if(last!=null) last.next=node; + last= node; + if(first==null) first =last; + + } + + /** + * 从队首取元素,不会 remove 元素 + * @return + */ + public T peek(){ + if(first == null) throw new EmptyQueueException(); + return first.data; + } + + public boolean isEmpty(){ + return first == null; + } +} diff --git a/src/main/java/name/zicat/leetcode/recursion/RecursionUtil.java b/src/main/java/name/zicat/leetcode/recursion/RecursionUtil.java new file mode 100644 index 0000000..1394bb8 --- /dev/null +++ b/src/main/java/name/zicat/leetcode/recursion/RecursionUtil.java @@ -0,0 +1,135 @@ +package name.zicat.leetcode.recursion; + +import java.util.List; + +/** + * @author jessica + */ +public class RecursionUtil { + /** + * 递归模板 + * + * 写递归的 要点 leetcode 国际站 most votes看一遍 + * + * + * public void recur(int level,int param){ + * //terminator + * if(level > MAX_LEVEL){ + * //process result + * return; + * } + * //process current logic + * process(level,param); + * + * //drill down + * recur(level,level+1,newParam) + * + * + * //restore current status + * + * } + * + */ + + /** + * 递归 找重复性 + * + */ + + /** + * 爬楼梯 leetcode 70 + */ + public static void climbStairs(int n){ + + } + + public static void main(String[] args) { + generateParenthesis(3); + } + + + /** + * 括号生成 leetcode 22 + */ + public static List generateParenthesis(int n){ + //_generate(0,2 * n,""); + + _generate(0,0,2* n,""); + + return null; + + } + + private static void _generate(int level, int max, String s) { + //terminator + if(level >=max){ + //filter s is invalid 只能 有 n个 左括号 ,right 必须出现 左括号的后面 + + System.out.println("s = " + s); + return; + } + + //process + + String s1= s + "("; + String s2= s + ")"; + + //drill down + + _generate(level+1,max,s1); + _generate(level+1,max,s2); + + //reverse states + + + } + + private static void _generate(int left, int right,int n, String s) { + //terminator + if(left == n && right == n){ + //filter s is invalid 只能 有 n个 左括号 ,right 必须出现 左括号的后面 + + System.out.println("s = " + s); + return; + } + + //process + + String s1= s + "("; + String s2= s + ")"; + + //drill down + if(left < n) { + _generate(left + 1, right,n, s1); + } + if(left > right) { + _generate(left, right + 1, n, s2); + } + + + //reverse states + + + } + + /** + * 斐波那契数列 非递归法 + * @param n + * @return + */ + public static int fib(int n){ + int first =0; + int second =1; + while (n -->0){ + int temp = first + second; + first = second; + + second = temp; + } + + return first; + + } + + +} diff --git a/src/main/java/name/zicat/leetcode/search/SearchUtil.java b/src/main/java/name/zicat/leetcode/search/SearchUtil.java new file mode 100644 index 0000000..bf69224 --- /dev/null +++ b/src/main/java/name/zicat/leetcode/search/SearchUtil.java @@ -0,0 +1,29 @@ +package name.zicat.leetcode.search; + +public class SearchUtil { + + public static void main(String[] args) { + int[] nums ={0,1,2,3,4,5}; + int target = 7; + System.out.println("target = " + binarySearchInsert(nums,target));; + } + + /** + * 二分法,寻找 元素 插入的位置,时间复杂度 O(logN) + */ + + public static int binarySearchInsert(int[] nums,int target) { + if(nums == null) return 0; + int start =0; + int end = nums.length-1; + while(start<=end){ + int mid = (start+end)/2; + if(nums[mid] == target) return mid; + else if(nums[mid] < target) start = mid +1; + else end = mid-1; + + } + + return start; + } +} diff --git a/src/main/java/name/zicat/leetcode/stack/Stack.java b/src/main/java/name/zicat/leetcode/stack/Stack.java new file mode 100644 index 0000000..f47f094 --- /dev/null +++ b/src/main/java/name/zicat/leetcode/stack/Stack.java @@ -0,0 +1,63 @@ +package name.zicat.leetcode.stack; + +import java.util.EmptyStackException; + +/** + * 先进 后出 + */ +public class Stack { + + private static class StackNode { + private T data; + private StackNode next; + + public StackNode(T data){ + this.data =data; + } + } + + /** + * 对栈顶元素的操作 + */ + private StackNode top; + + /** + * 从栈顶取元素 + * @return + */ + public T pop(){ + if(top == null) throw EmptyStackException(); + T value = top.data; + /** + * 栈顶的指针指向 下一个 + */ + top = top.next; + return value; + } + + /** + * 新的 node的 + * @param item + */ + public void push(T item){ + + StackNode node = new StackNode(item); + node.next = top; + top = node; + + } + + /** + * peek是 查看 栈顶元素的值, pop是取出元素 + * @return + */ + public T peek(){ + if(top == null) throw new EmptyStackException(); + return top.data; + + } + + public boolean isEmpty(){ + return top == null; + } +} diff --git a/src/main/java/name/zicat/leetcode/tree/TreeUtils.java b/src/main/java/name/zicat/leetcode/tree/TreeUtils.java new file mode 100644 index 0000000..779edf5 --- /dev/null +++ b/src/main/java/name/zicat/leetcode/tree/TreeUtils.java @@ -0,0 +1,50 @@ +package name.zicat.leetcode.tree; + +import javax.swing.tree.TreeNode; + +/** + * @author jessica + * Date 2020/7/29 + */ +public class TreeUtils { + /** + * BST 中序遍历是有序的 + */ + + /** + * https://visualgo.net/zh/bst + * 前序遍历 + * def preorder(self,root) + * if root: + * self.traverse_path.append(root.val) + * self.preorder(root.left) + * self.preorder(root.right) + * + * 中序遍历 + * + * def inorder(self,root): + * if root + * self.inorder(root.left) + * self.traverse_path append(root.val) + * self inorder(root.right) + * + * 后序遍历 + * + * def postorder(self,root) + * if root: + * self.postorder(root.left) + * self.postorder(root.right) + * self.traverse_path append(root.val) + */ + + + /** + * https://leetcode-cn.com/problems/binary-tree-inorder-traversal + * input [1,null,2,3] + * + */ + public static int inOrderTraversal(TreeNode root){ + + return 0; + } +} From 0b0b89d51c1c2242d7082b35eb6deec93b1166b7 Mon Sep 17 00:00:00 2001 From: jessica <604284275@qq.com> Date: Mon, 31 Aug 2020 02:51:48 +0800 Subject: [PATCH 02/16] [Leetcode-2] queue and stack complete --- .../name/zicat/leetcode/array/ListNode.java | 4 +- .../zicat/leetcode/queue/PriorityQueue.java | 20 +- .../name/zicat/leetcode/queue/QueueUtil.java | 128 +++++++++ .../zicat/leetcode/stack/MedianFinder.java | 56 ++++ .../java/name/zicat/leetcode/stack/Stack.java | 4 +- .../name/zicat/leetcode/stack/StackUtil.java | 260 ++++++++++++++++++ 6 files changed, 467 insertions(+), 5 deletions(-) create mode 100644 src/main/java/name/zicat/leetcode/queue/QueueUtil.java create mode 100644 src/main/java/name/zicat/leetcode/stack/MedianFinder.java create mode 100644 src/main/java/name/zicat/leetcode/stack/StackUtil.java diff --git a/src/main/java/name/zicat/leetcode/array/ListNode.java b/src/main/java/name/zicat/leetcode/array/ListNode.java index 627dbe5..f4383f9 100644 --- a/src/main/java/name/zicat/leetcode/array/ListNode.java +++ b/src/main/java/name/zicat/leetcode/array/ListNode.java @@ -2,6 +2,6 @@ public class ListNode { int val; - ListNode next; - ListNode(int x) { val = x;} + public ListNode next; + public ListNode(int x) { val = x;} } diff --git a/src/main/java/name/zicat/leetcode/queue/PriorityQueue.java b/src/main/java/name/zicat/leetcode/queue/PriorityQueue.java index 5af389e..042f8f7 100644 --- a/src/main/java/name/zicat/leetcode/queue/PriorityQueue.java +++ b/src/main/java/name/zicat/leetcode/queue/PriorityQueue.java @@ -11,5 +11,23 @@ * * 4.基于堆实现的优先队列的插入复杂度是O(logN) */ -public class PriorityQueue { +public class PriorityQueue { + + public void add(T data) { + + + } + + public T peek(){ + + return null; + } + + public T poll(){ + return null; + } + + public int size(){ + return 0; + } } diff --git a/src/main/java/name/zicat/leetcode/queue/QueueUtil.java b/src/main/java/name/zicat/leetcode/queue/QueueUtil.java new file mode 100644 index 0000000..6dc6525 --- /dev/null +++ b/src/main/java/name/zicat/leetcode/queue/QueueUtil.java @@ -0,0 +1,128 @@ +package name.zicat.leetcode.queue; + +import name.zicat.leetcode.array.ListNode; + +import java.util.LinkedList; + +public class QueueUtil { + /** + * 239.滑动窗口最大值 (hard) + * + * 滑动窗口 + * + * 双端队列 + * Deque 中 队首 永远都是 滑动窗口的最大值 + * [1,3,-1,-3,5,3] + * [1] Deque 1 Result + * [1,3] Deque 3 Result + * [1,3,-1] Deque 3 -1 Result 3(Deque) + * [1,3,-1,-3] Deque 3 -1 -3 Result 3 3 + * [1,3,-1,-3 5] Deque 5 (3,-1,-3出队并且滑动窗口的size大于k) Result 3 3 5 + * [1,3,-1,-3 5 3] Deque 5 3 Result 3 3 5 5 + * + */ + + public int[] maxSlidingWindow(int[] nums,int k){ + if(nums==null || nums.length ==0){ + return new int[0]; + } + int[] result = new int[nums.length-k+1]; + /** + * 存放 最大值的索引 + */ + LinkedList deque = new LinkedList(); + for(int i=0;ik的情况 + if(!deque.isEmpty() && deque.peekFirst()==i-k){ + //需要队首移除 元素 + deque.poll(); + } + /** + * 新入栈的元素大于 队尾的元素的话,把元素移除,保证队首是最大值 + */ + while(!deque.isEmpty()&&nums[deque.peekLast()]=k){ + result[i+1-k] = nums[deque.peek()]; + } + } + return result; + } + /** + * 23.合并k个排序链表 + * 用优先队列 优先队列需要重新实现一遍 + * + */ + + public ListNode mergeKList(ListNode[] lists){ + // 边界情况 + + if(lists==null|| lists.length==0){ + return null; + } + + PriorityQueue queue = new PriorityQueue<>(); + //定义带头人 + ListNode fakeHead = new ListNode(0); + ListNode p = fakeHead; + //遍历排好序的lists 的首节点,放在队列中 + for(ListNode list:lists){ + if(list!=null){ + queue.add(list); + } + } + // + while(queue.size() >0){ + ListNode n = queue.poll(); + p.next = n; + //最小节点的下一个节点入队 + if(n.next!=null){ + queue.add(n.next); + } + } + + return fakeHead.next; + + } + + /** + * 时间复杂度:考虑优先队列中的元素不超过 kk 个,那么插入和删除的时间代价为 O(\log k)O(logk),这里最多有 knkn 个点,对于每个点都被插入删除各一次,故总的时间代价即渐进时间复杂度为 O(kn \times \log k)O(kn×logk)。 + * 空间复杂度:这里用了优先队列,优先队列中的元素不超过 kk 个,故渐进空间复杂度为 O(k)O(k) + * + * @param lists + * @return + */ + public ListNode mergeKLists(ListNode[] lists) { + if (lists == null || lists.length == 0) return null; + PriorityQueue queue = new PriorityQueue<>(lists.length, new Comparator() { + @Override + public int compare(ListNode o1, ListNode o2) { + if (o1.val < o2.val) return -1; + else if (o1.val == o2.val) return 0; + else return 1; + } + }); + ListNode dummy = new ListNode(0); + ListNode p = dummy; + for (ListNode node : lists) { + if (node != null) queue.add(node); + } + while (!queue.isEmpty()) { + p.next = queue.poll(); + p = p.next; + if (p.next != null) queue.add(p.next); + } + return dummy.next; + + } + + + + + +} diff --git a/src/main/java/name/zicat/leetcode/stack/MedianFinder.java b/src/main/java/name/zicat/leetcode/stack/MedianFinder.java new file mode 100644 index 0000000..bfe8006 --- /dev/null +++ b/src/main/java/name/zicat/leetcode/stack/MedianFinder.java @@ -0,0 +1,56 @@ +package name.zicat.leetcode.stack; + +import name.zicat.leetcode.queue.PriorityQueue; + +/** + * 295 数据流的中位数 + * + * 有序列表 + * + * 优先队列 维护最大值的优先队列,维护最小值的优先队列 + * + * 奇数 拿 左队列的 第一个数, 偶数 拿 左右的数 做个平方 + * + * addNum + * + * findMedian + */ +public class MedianFinder { + + /** + * 当前大顶堆和小顶堆的元素个数之和 + */ + private int count; + private PriorityQueue maxheap; + private PriorityQueue minheap; + + /** + * initialize your data structure here. + */ + public MedianFinder() { + count = 0; + maxheap = new PriorityQueue<>((x, y) -> y - x); + minheap = new PriorityQueue<>(); + } + + public void addNum(int num) { + count += 1; + maxheap.add(num); + minheap.add(maxheap.poll()); + // 如果两个堆合起来的元素个数是奇数,小顶堆要拿出堆顶元素给大顶堆 + if ((count & 1) != 0) { + maxheap.add(minheap.poll()); + } + } + + public double findMedian() { + if ((count & 1) == 0) { + // 如果两个堆合起来的元素个数是偶数,数据流的中位数就是各自堆顶元素的平均值 + return (double) (maxheap.peek() + minheap.peek()) / 2; + } else { + // 如果两个堆合起来的元素个数是奇数,数据流的中位数大顶堆的堆顶元素 + return (double) maxheap.peek(); + } + } + +} diff --git a/src/main/java/name/zicat/leetcode/stack/Stack.java b/src/main/java/name/zicat/leetcode/stack/Stack.java index f47f094..8816f28 100644 --- a/src/main/java/name/zicat/leetcode/stack/Stack.java +++ b/src/main/java/name/zicat/leetcode/stack/Stack.java @@ -5,7 +5,7 @@ /** * 先进 后出 */ -public class Stack { +public class Stack { private static class StackNode { private T data; @@ -19,7 +19,7 @@ public StackNode(T data){ /** * 对栈顶元素的操作 */ - private StackNode top; + private StackNode top; /** * 从栈顶取元素 diff --git a/src/main/java/name/zicat/leetcode/stack/StackUtil.java b/src/main/java/name/zicat/leetcode/stack/StackUtil.java new file mode 100644 index 0000000..09e5a3d --- /dev/null +++ b/src/main/java/name/zicat/leetcode/stack/StackUtil.java @@ -0,0 +1,260 @@ +package name.zicat.leetcode.stack; + +/** + * + */ +public class StackUtil { + /** + * 配对问题 用 栈 + */ + + /** + * 84 柱状图中最大的矩形面积。 + * + * 输入 [2,1,5,6,2,3] + * + * 输出 10 ,5和6 最大矩阵组合是 10 + * + * 某个柱子 向左右扩展,遇到比自己矮的柱子,停止 + * + * 给定一个数 找到 左边和右边 第一个 比自己小的数的位置 + * + * 单调栈里面的元素 是 单调递增或者 单调递减 + * + * 如果 入栈的数 比自己小,就可以知道出栈的元素左右的比自己小的数,即计算出栈的元素的面积 + * + */ + public static int largestRectangleArea(int[] heights) { + /** + * 处理边界情况 + */ + if( heights == null || heights.length ==0) { + return 0; + } + + int l =heights.length; + /** + * 维护成单调递增的栈 + */ + Stack stack = new Stack<>(); + int result =0 ; + for (int i=0;i<=l;i++){ + /** + * 出栈的时候 才会计算 柱子为高度的矩阵,所以最后一个元素的时候要 push进去个-1 + */ + int cur = i == l ? -1:heights[i]; + + /** + * 如果小于 栈订端的元素,即找到 顶端元素 左边和右边最小的数 的index停止即可 + */ + while(!stack.isEmpty() && cur<=heights[stack.peek()]) { + //高就是要出栈的元素 + int height = heights[stack.pop()]; + /** + * 单调递增的 left 基本上就是自己的index位置 + */ + int left = stack.isEmpty()? 0: (stack.peek()+1); + + /** + * 右边就是 + */ + int right = i-1; + int erea = height * (right - left +1); + result = Math.max(result,erea); + + } + /** + * push 索引位置 + */ + stack.push(i); + } + return result; + } + + + /** + * 1249 移除无效的括号 (medium) + * + * 左括号对应 入栈操作, 右括号出栈操作 + * + * input s= "lee(t(c)o)de)" + * + * output leet() + * + */ + + public static String minRemoveToMakeValid(String s) { + if(s == null){ + return null; + } + // 保存 左括号的下标 + Stack stack = new Stack<>(); + + // 默认值是 false,数组中值为 true的数组下标对应的值需要移除 + boolean[] checkExist = new boolean[s.length()]; + + for(int i=0;i< s.length();i++){ + + if(s.charAt(i) == '('){ + //左括号的话入栈 + stack.push(i); + //并且此时 暂无匹配的 右括号 + checkExist[i] =true; + } + + /** + * 栈不是空的 ,说明有匹配 + */ + if(s.charAt(i) == ')' && !stack.isEmpty()){ + //有匹配 + checkExist[stack.pop()] =false; + + } + else if (s.charAt(i) ==')' && stack.isEmpty()){ + //无匹配 + checkExist[i] = true; + } + + } + + StringBuilder result = new StringBuilder(); + for(int i=0;i< s.length();i++){ + if(checkExist[i] == true){ + continue; + } + result.append(s.charAt(i)); + } + return result.toString(); + } + + /** + * 42.接雨水 + * + * 输入 [0,1,0,2,1,0,1,3,2,1,2,1] + * + * 输出 6 + * + * 递减时不断入栈 + * + * 出现高出前面的柱子,可以计算 接水槽 + * + * [4 3 2 5] + * 出栈 第三个元素 2 + * 计算 5 与 3之间的积水 + * + * 积水槽的面积 (3(5的下标)-1(3的下标)-1 )* [min(3,5)-2] + * + * 计算 5与 4之间的积水 + * (3(5的下标)-0(4的下标)-1)*(4-3) + * + * O(N) 每个柱子都最多进栈一次,出栈一次 + * + */ + + public static int trap(int[] height) { + Stack stack = new Stack<>(); + int area =0; + int index =0; + while(index < height.length){ + while(!stack.isEmpty()&& height[index] > height[stack.peek()]) { + int top = stack.pop(); + if(stack.isEmpty()){ + break; + } + int distance = index - stack.peek() -1; + int height2= Math.min(height[index],height[stack.peek()]) -height[top]; + area += distance * height2; + + } + stack.push(index); + index++; + } + return area; + + } + + /** + * 85 最大矩形 + * + * [1,0,1,0,0] + * [1,0,1,1,1] + * [1,1,1,1,1] + * [1,0,0,1,0] + * + * 替换成柱状图 求 柱状图的最大面积 + * + * + * 没看懂 + * + * + */ + + + + public static int maxArea(int[] heights) { + if(heights == null || heights.length ==0){ + return 0; + } + Stack stack = new Stack(); + int max =0; + int i=0; + while(i stack = new Stack < > (); + stack.push(-1); + int maxarea = 0; + for (int i = 0; i < heights.length; ++i) { + while (stack.peek() != -1 && heights[stack.peek()] >= heights[i]) + maxarea = Math.max(maxarea, heights[stack.pop()] * (i - stack.peek() - 1)); + stack.push(i); + } + while (stack.peek() != -1) + maxarea = Math.max(maxarea, heights[stack.pop()] * (heights.length - stack.peek() -1)); + return maxarea; + } + + public static int maximalRectangle(char[][] matrix) { + + if (matrix.length == 0) return 0; + int maxarea = 0; + int[] dp = new int[matrix[0].length]; + + for(int i = 0; i < matrix.length; i++) { + for(int j = 0; j < matrix[0].length; j++) { + + // update the state of this row's histogram using the last row's histogram + // by keeping track of the number of consecutive ones + + dp[j] = matrix[i][j] == '1' ? dp[j] + 1 : 0; + } + // update maxarea with the maximum area from this row's histogram + maxarea = Math.max(maxarea, leetcode84(dp)); + } return maxarea; + } + + + + + + + + +} From 2a2c3fa00f2e0d1a794c652342e6cca80e51e798 Mon Sep 17 00:00:00 2001 From: jessica <604284275@qq.com> Date: Mon, 31 Aug 2020 22:25:00 +0800 Subject: [PATCH 03/16] [Leetcode-2] queue and stack complete --- .../name/zicat/leetcode/array/ListNode.java | 2 +- .../name/zicat/leetcode/queue/FreqStack.java | 62 ++++++++++++++++++ .../zicat/leetcode/queue/MyCircularQueue.java | 63 +++++++++++++++++++ ...orityQueue.java => PriorityQueueTest.java} | 2 +- .../java/name/zicat/leetcode/queue/Queue.java | 2 +- .../name/zicat/leetcode/queue/QueueUtil.java | 52 ++++++++++++++- .../zicat/leetcode/stack/MedianFinder.java | 10 +-- .../java/name/zicat/leetcode/stack/Stack.java | 7 +++ .../name/zicat/leetcode/stack/StackUtil.java | 29 ++++++++- 9 files changed, 218 insertions(+), 11 deletions(-) create mode 100644 src/main/java/name/zicat/leetcode/queue/FreqStack.java create mode 100644 src/main/java/name/zicat/leetcode/queue/MyCircularQueue.java rename src/main/java/name/zicat/leetcode/queue/{PriorityQueue.java => PriorityQueueTest.java} (92%) diff --git a/src/main/java/name/zicat/leetcode/array/ListNode.java b/src/main/java/name/zicat/leetcode/array/ListNode.java index f4383f9..df1286f 100644 --- a/src/main/java/name/zicat/leetcode/array/ListNode.java +++ b/src/main/java/name/zicat/leetcode/array/ListNode.java @@ -1,7 +1,7 @@ package name.zicat.leetcode.array; public class ListNode { - int val; + public int val; public ListNode next; public ListNode(int x) { val = x;} } diff --git a/src/main/java/name/zicat/leetcode/queue/FreqStack.java b/src/main/java/name/zicat/leetcode/queue/FreqStack.java new file mode 100644 index 0000000..749c508 --- /dev/null +++ b/src/main/java/name/zicat/leetcode/queue/FreqStack.java @@ -0,0 +1,62 @@ +package name.zicat.leetcode.queue; + +import java.util.HashMap; +import java.util.Map; +import java.util.Stack; + +/** + *实现 FreqStack,模拟类似栈的数据结构的操作的一个类。 + * + * FreqStack 有两个函数: + * + * push(int x),将整数 x 推入栈中。 + * pop(),它移除并返回栈中出现最频繁的元素。 + * 如果最频繁的元素不只一个,则移除并返回最接近栈顶的元素。 + * + */ +public class FreqStack { + /** + * 时间复杂度:对于 push 和 pop 操作,O(1)O(1)。 + * 空间复杂度:O(N)O(N),其中 N 为 FreqStack 中元素的数目。 + */ + + + + + /** + * key: 3,value :频率 + */ + Map freq; + /** + * key: 频率 ,value是 Stack 里面存 相同频率的 key的信息,靠近 栈顶的元素 相对更新一点 + */ + Map> group; + int maxfreq; + + public FreqStack(){ + freq = new HashMap<>(); + group = new HashMap<>(); + maxfreq =0; + } + + + public void push(int x ){ + int f = freq.getOrDefault(x,0) +1; + freq.put(x, f); + if(f > maxfreq){ + maxfreq = f; + } + + group.computeIfAbsent(f, z->new Stack<>()).push(x); + } + + public int pop(){ + int x = group.get(maxfreq).pop(); + freq.put(x, freq.get(x) -1); + if(group.get(maxfreq).size()==0){ + maxfreq--; + } + return x; + } + + } diff --git a/src/main/java/name/zicat/leetcode/queue/MyCircularQueue.java b/src/main/java/name/zicat/leetcode/queue/MyCircularQueue.java new file mode 100644 index 0000000..1cba096 --- /dev/null +++ b/src/main/java/name/zicat/leetcode/queue/MyCircularQueue.java @@ -0,0 +1,63 @@ +package name.zicat.leetcode.queue; + +/** + * 需要看一下 + */ +public class MyCircularQueue { + private int[] queue; + private int headIndex; + private int count; + private int capacity; + + /** Initialize your data structure here. Set the size of the queue to be k. */ + public MyCircularQueue(int k) { + this.capacity = k; + this.queue = new int[k]; + this.headIndex = 0; + this.count = 0; + } + + /** Insert an element into the circular queue. Return true if the operation is successful. */ + public boolean enQueue(int value) { + if (this.count == this.capacity) + return false; + this.queue[(this.headIndex + this.count) % this.capacity] = value; + this.count += 1; + return true; + } + + /** Delete an element from the circular queue. Return true if the operation is successful. */ + public boolean deQueue() { + if (this.count == 0) + return false; + this.headIndex = (this.headIndex + 1) % this.capacity; + this.count -= 1; + return true; + } + + /** Get the front item from the queue. */ + public int Front() { + if (this.count == 0) + return -1; + return this.queue[this.headIndex]; + } + + /** Get the last item from the queue. */ + public int Rear() { + if (this.count == 0) + return -1; + int tailIndex = (this.headIndex + this.count - 1) % this.capacity; + return this.queue[tailIndex]; + } + + /** Checks whether the circular queue is empty or not. */ + public boolean isEmpty() { + return (this.count == 0); + } + + /** Checks whether the circular queue is full or not. */ + public boolean isFull() { + return (this.count == this.capacity); + } + +} diff --git a/src/main/java/name/zicat/leetcode/queue/PriorityQueue.java b/src/main/java/name/zicat/leetcode/queue/PriorityQueueTest.java similarity index 92% rename from src/main/java/name/zicat/leetcode/queue/PriorityQueue.java rename to src/main/java/name/zicat/leetcode/queue/PriorityQueueTest.java index 042f8f7..5a9a58f 100644 --- a/src/main/java/name/zicat/leetcode/queue/PriorityQueue.java +++ b/src/main/java/name/zicat/leetcode/queue/PriorityQueueTest.java @@ -11,7 +11,7 @@ * * 4.基于堆实现的优先队列的插入复杂度是O(logN) */ -public class PriorityQueue { +public class PriorityQueueTest { public void add(T data) { diff --git a/src/main/java/name/zicat/leetcode/queue/Queue.java b/src/main/java/name/zicat/leetcode/queue/Queue.java index 3f541c6..6525ad9 100644 --- a/src/main/java/name/zicat/leetcode/queue/Queue.java +++ b/src/main/java/name/zicat/leetcode/queue/Queue.java @@ -5,7 +5,7 @@ * * 从 尾部 追加,头部 取出 */ -public class Queue { +public class Queue { private static class QueueNode { private T data; diff --git a/src/main/java/name/zicat/leetcode/queue/QueueUtil.java b/src/main/java/name/zicat/leetcode/queue/QueueUtil.java index 6dc6525..5bca0ef 100644 --- a/src/main/java/name/zicat/leetcode/queue/QueueUtil.java +++ b/src/main/java/name/zicat/leetcode/queue/QueueUtil.java @@ -2,7 +2,12 @@ import name.zicat.leetcode.array.ListNode; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.LinkedList; +import java.util.List; +import java.util.PriorityQueue; public class QueueUtil { /** @@ -66,7 +71,7 @@ public ListNode mergeKList(ListNode[] lists){ return null; } - PriorityQueue queue = new PriorityQueue<>(); + PriorityQueueTest queue = new PriorityQueueTest<>(); //定义带头人 ListNode fakeHead = new ListNode(0); ListNode p = fakeHead; @@ -99,7 +104,7 @@ public ListNode mergeKList(ListNode[] lists){ */ public ListNode mergeKLists(ListNode[] lists) { if (lists == null || lists.length == 0) return null; - PriorityQueue queue = new PriorityQueue<>(lists.length, new Comparator() { + PriorityQueue queue = new PriorityQueue(lists.length, new Comparator() { @Override public int compare(ListNode o1, ListNode o2) { if (o1.val < o2.val) return -1; @@ -121,6 +126,49 @@ public int compare(ListNode o1, ListNode o2) { } + /** + * 621.任务调度器 + * + * 在选择每一轮中的任务时,我们也可以用优先队列(堆)来代替排序。在一开始,我们把所有的任务加入到优先队列中。在每一轮,我们从优先队列中选择最多 n + 1 个任务,把它们的数量减去 1,再放回堆中(如果数量不为 0),直到堆为空。 + * 输入:tasks = ["A","A","A","B","B","B"], n = 2 + * 输出:8 + * 解释:A -> B -> (待命) -> A -> B -> (待命) -> A -> B. + * 在本示例中,两个相同类型任务之间必须间隔长度为 n = 2 的冷却时间,而执行一个任务只需要一个单位时间,所以中间出现了(待命)状态。 + * + */ + + public static int leastInterval(char[] tasks,int n) { + int[] map = new int[26]; + for (char c: tasks) + map[c - 'A']++; + PriorityQueue < Integer > queue = new PriorityQueue <> (26, Collections.reverseOrder()); + for (int f: map) { + if (f > 0) + queue.add(f); + } + int time = 0; + while (!queue.isEmpty()) { + int i = 0; + List< Integer > temp = new ArrayList< >(); + while (i <= n) { + if (!queue.isEmpty()) { + if (queue.peek() > 1) + temp.add(queue.poll() - 1); + else + queue.poll(); + } + time++; + if (queue.isEmpty() && temp.size() == 0) + break; + i++; + } + for (int l: temp) + queue.add(l); + } + return time; + + } + diff --git a/src/main/java/name/zicat/leetcode/stack/MedianFinder.java b/src/main/java/name/zicat/leetcode/stack/MedianFinder.java index bfe8006..5922830 100644 --- a/src/main/java/name/zicat/leetcode/stack/MedianFinder.java +++ b/src/main/java/name/zicat/leetcode/stack/MedianFinder.java @@ -1,6 +1,6 @@ package name.zicat.leetcode.stack; -import name.zicat.leetcode.queue.PriorityQueue; +import name.zicat.leetcode.queue.PriorityQueueTest; /** * 295 数据流的中位数 @@ -21,16 +21,16 @@ public class MedianFinder { * 当前大顶堆和小顶堆的元素个数之和 */ private int count; - private PriorityQueue maxheap; - private PriorityQueue minheap; + private PriorityQueueTest maxheap; + private PriorityQueueTest minheap; /** * initialize your data structure here. */ public MedianFinder() { count = 0; - maxheap = new PriorityQueue<>((x, y) -> y - x); - minheap = new PriorityQueue<>(); + maxheap = new PriorityQueueTest<>((x, y) -> y - x); + minheap = new PriorityQueueTest<>(); } public void addNum(int num) { diff --git a/src/main/java/name/zicat/leetcode/stack/Stack.java b/src/main/java/name/zicat/leetcode/stack/Stack.java index 8816f28..5372383 100644 --- a/src/main/java/name/zicat/leetcode/stack/Stack.java +++ b/src/main/java/name/zicat/leetcode/stack/Stack.java @@ -4,6 +4,13 @@ /** * 先进 后出 + * + * 总结 + * 括号的题目想到用栈 + * + * 有配对关系的题目可以用栈 + * + * */ public class Stack { diff --git a/src/main/java/name/zicat/leetcode/stack/StackUtil.java b/src/main/java/name/zicat/leetcode/stack/StackUtil.java index 09e5a3d..4e37dc0 100644 --- a/src/main/java/name/zicat/leetcode/stack/StackUtil.java +++ b/src/main/java/name/zicat/leetcode/stack/StackUtil.java @@ -1,7 +1,10 @@ package name.zicat.leetcode.stack; /** - * + * 总结 + * * 括号的题目想到用栈 + * * + * * 有配对关系的题目可以用栈 */ public class StackUtil { /** @@ -250,6 +253,30 @@ public static int maximalRectangle(char[][] matrix) { } return maxarea; } + /** + * 503 + */ + + /** + * 895 + */ + + /** + * 353 + */ + + /** + * 621 + */ + + /** + * 622 + */ + + /** + * 862 + */ + From d241fe49a983d9f5156d9a0b074d1cec973d4e30 Mon Sep 17 00:00:00 2001 From: jessica <604284275@qq.com> Date: Tue, 1 Sep 2020 19:36:15 +0800 Subject: [PATCH 04/16] [Leetcode-3] tree and graph complete --- .../java/name/zicat/leetcode/graph/Graph.java | 94 +++++ .../name/zicat/leetcode/tree/TreeNode.java | 8 + .../name/zicat/leetcode/tree/TreeUtils.java | 363 +++++++++++++++++- 3 files changed, 462 insertions(+), 3 deletions(-) create mode 100644 src/main/java/name/zicat/leetcode/graph/Graph.java create mode 100644 src/main/java/name/zicat/leetcode/tree/TreeNode.java diff --git a/src/main/java/name/zicat/leetcode/graph/Graph.java b/src/main/java/name/zicat/leetcode/graph/Graph.java new file mode 100644 index 0000000..218214f --- /dev/null +++ b/src/main/java/name/zicat/leetcode/graph/Graph.java @@ -0,0 +1,94 @@ +package name.zicat.leetcode.graph; + +/** + * 1.图的定义 + * 图是由顶点的有穷非空集合和顶点之间的边的集合组成, + * 通常表示为G(V,E),其中G表示一个图, + * V表示图中顶点的集合,E是图中边的集合 + * + * 无向图:顶点之间边没有方向 + * 有向图:顶点之间边有方向 + * 权:图中边相关的数据,用来表示从一个顶点到另一个顶点的距离或者耗时 + * + * 2.树是一种特殊的图 树是没有环的图 + * + * 3.图的深度优先和广度优先遍历 + * + * 4.并查集在图中的应用 + * + * 5.拓扑排序 + */ +public class Graph { + /** + * 785.判断二分图 + * 邻接表 + * graph[i]表示图中与节点i相连的所有节点。每个节点都是一个在0到graph.length-1之间的整数。这图中没有自环和平行边: graph[i] 中不存在i,并且graph[i]中没有重复的值 + * 输入:[[1,3],[0,2],[1,3],[0,2]] + * 0 [1,3] 与节点0 相邻的节点是 1和3 + * 1 [0,2] 与节点1 相邻的节点是 0和2 + * 2 [1,3] 与节点2 相邻的节点是 1和3 + * 3 [0,2] 与节点3 相邻的节点是 0和2 + * 0 -- 1 + * | | + * | | + * 3 -- 2 + * 输出: true + * + * 可以将节点分成两组 {0,2}和{1,3} + * 同理 + * 输入:[[1,2,3],[0,2],[0,1,3],[0,2]] + * 0 —— 1 + * | \ | + * 3 —— 2 + * 输出: false + * + * 方法:相邻的节点 的颜色不一样 + * 时间复杂度是 O(N+E) + * + * + */ + + public boolean isBipartite(int[][] graph){ + /** + * 表示 相邻节点的颜色,初始值为0,表示没有着色 + */ + int[] colors = new int[graph.length]; + //1和 -1表示颜色分组 + //O(N) + for(int i=0;i data_list = new LinkedList(Arrays.asList(data_array)); + return deserializeHelper(data_list); + } + + private TreeNode deserializeHelper(List data_list) { + //递归处理,从字符串首元素开始处理 + if(data_list.get(0).equals("null")) { + data_list.remove(0); + return null; + } + //不是null建立新的 treenode + TreeNode root = new TreeNode(Integer.valueOf(data_list.get(0))); + data_list.remove(0); + //递归处理先反序列化左子树,再反序列化右子树 + root.left = deserializeHelper(data_list); + root.right = deserializeHelper(data_list); + return root; + } + + /** + * 广度优先 遍历 + */ + + /** + * 广度优先遍历 序列化 时间复杂度 O(N) + * @param root + * @return + */ + public static String serializeG(TreeNode root){ + if(root ==null){ + return ""; + } + StringBuilder sb = new StringBuilder(); + LinkedList queue = new LinkedList<>(); + //队列里面加 跟节点 + queue.add(root); + + while(!queue.isEmpty()){ + //出queue的操作 + TreeNode t =queue.poll(); + if(t!=null){ + sb.append(t.val+","); + //左右节点 加入 queue中 + queue.add(t.left); + queue.add(t.right); + } else { + sb.append("#,"); + } + } + + sb.deleteCharAt(sb.length() -1); + return sb.toString(); + + } + /** + * 广度优先遍历 反序列化 时间复杂度 O(N) + */ + + public static TreeNode deserializeG(String data){ + if(data==null || data.length()==0){ + return null; + } + String[] arr = data.split(","); + TreeNode root = new TreeNode(Integer.parseInt(arr[0])); + LinkedList queue = new LinkedList<>(); + + queue.add(root); + //建立zhizhne + int i=1; + while(!queue.isEmpty()){ + TreeNode t =queue.poll(); + if(t ==null){ + continue; + } + /** + * 先还原 左子树 + */ + if(!arr[i].equals("#")){ + t.left = new TreeNode(Integer.parseInt(arr[i])); + queue.offer(t.left); + } else { + // # 号是 null value + t.left = null; + queue.offer(null); + } + i++; + + /** + * 再还原 右子树 + */ + if(!arr[i].equals("#")){ + t.right = new TreeNode(Integer.parseInt(arr[i])); + queue.offer(t.right); + } else { + t.right =null; + queue.offer(null); + } + i++; + } + return root; + + } + + /** + * 450.删除二叉搜索树中的节点 + * 给定一个二叉搜索树的根节点 root和一个值key, + * 删除二叉搜索树中的key对应的节点,并保证二叉搜索树的性质不变 + * 返回二叉搜索树(会被更新)的根节点的引用 + * + * 一般来说,删除节点可分为两个步骤: + * + * 首先找到需要删除的节点: + * 如果找到了,删除它 + * + * 要求算法时间复杂度为O(h),h为树的高度 + * + * root [5,3,6,2,4,null,7] + * key =3 + * 5 + * /\ + * 3 6 + * /\ \ + * 2 4 7 + * + * + * 结果是 + * 5 + * /\ + * 4 6 + * / \ + * 2 7 + * + * [5,4,6,2,null,7] + * + * 思路: + * 如果 key > root.val 递归右子树,删除节点 root.right = deleteNode(root.right, key) + * 如果 key < root.val 递归左子树,删除节点 root.left = deleteNode(root.left,key) + * + * 如果 key == root.val + * 1.node 是叶子节点,直接删除: root =null + * 2.node 不是叶子节点,并且有 右子树 ,用前驱节点(successor) 代替该节点 + * 后继节点是 右子树的最小值 + * + * 3.node不是叶子节点 并且有 左子树 ,用(predecessor) 后继节点代替 该节点 + * 前驱节点 是左子树的最小值 + * + * + **/ + public TreeNode deleteNode(TreeNode root,int key){ + //递归终止条件 + if(root==null){ + return null; + } + if(key > root.val){ + //在右子树 查找 该节点 + root.right =deleteNode(root.right,key); + } else if(key < root.val){ + //在左子树 查找该节点 + root.left = deleteNode(root.left,key); + } else { + //直接删除该节点 + if(root.left == null && root.right ==null){ + root =null; + } else if(root.right!=null){ + //替换 右子树的最小值,再删除 该节点 + root.val = rightMin(root); + root.right = deleteNode(root.right,root.val); + } else if(root.left!=null){ + //替换 左子树的最大值,再删除该节点 + root.val = leftMax(root); + root.left = deleteNode(root.left,root.val); + } + + } + return root; + } + + /** + * 找到以某个结点为根节点的右子树的最小值 + * @param root + * @return + */ + public int rightMin(TreeNode root){ + root = root.right; + while(root.left!=null) root = root.left; + return root.val; + } + + /** + * 找到某个节点为根节点的 左子树的最大值 + */ + public int leftMax(TreeNode root){ + root = root.left; + while(root.right!=null) root= root.right; + return root.val; + } + + /** + * 951.翻转等价二叉树 + * + * 树的子结构是 数,所以适合递归 + * + * + */ + + public boolean flipEquiv(TreeNode root1,TreeNode root2){ + + if(root1==null && root2==null){ + return true; + } + if(root1==null||root2==null ||root1.val!=root2.val){ + return false; + } + /** + * 两种情况 + */ + return (flipEquiv(root1.left,root2.left)&&flipEquiv(root1.right,root2.right)|| + flipEquiv(root1.left,root2.right)&& flipEquiv(root1.right,root2.left)); + } + + /** + * 1008 先序遍历 + * Input: 8 5 1 7 10 12 + * + * lowerBound: Integer.Min + * UpperBound: Integer.Max + * 值是不是在 [lowerBound,uppserBound]的范围内 是的话 upperBound为当前值 + * 时间复杂度 O(N) 遍历数组 + * 空间复杂度 O(N) 存储二叉树 + **/ + + int index =0; + int[] preorder; + int n; + public TreeNode bstFromPreOrder (int[] preorder) { + this.preorder = preorder; + n = preorder.length; + + return helper(Integer.MIN_VALUE,Integer.MAX_VALUE); + } + + /** + * 通过下限和上限来控制指针移动的范围 + * @param lowerBound + * @return + */ + private TreeNode helper(int lowerBound,int upperBound){ + //所有元素都加到 二叉树中 + if(index == n) + return null; + + int cur = preorder[index]; + + if(cur < lowerBound || cur >upperBound) return null; + index ++; + TreeNode root = new TreeNode(cur); + /** + * 递归组成 其做子树和右子树 + */ + root.left = helper(lowerBound,cur); + root.right = helper(cur,upperBound); + return root; + } + + + + + + + + + + + + + + + + } From ff703e846cfbb1d4b1d70a5c2048bbee1c6a0973 Mon Sep 17 00:00:00 2001 From: jessica <604284275@qq.com> Date: Wed, 2 Sep 2020 01:56:09 +0800 Subject: [PATCH 05/16] =?UTF-8?q?[Leetcode-4]=20trie=20=E5=B9=B6=E6=9F=A5?= =?UTF-8?q?=E9=9B=86=20=E5=92=8C=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/name/zicat/leetcode/graph/Graph.java | 78 +++++++++ .../java/name/zicat/leetcode/sort/Sort.java | 160 ++++++++++++++++++ .../name/zicat/leetcode/sort/SortUtil.java | 9 + .../java/name/zicat/leetcode/tree/Trie.java | 114 +++++++++++++ 4 files changed, 361 insertions(+) create mode 100644 src/main/java/name/zicat/leetcode/sort/Sort.java create mode 100644 src/main/java/name/zicat/leetcode/sort/SortUtil.java create mode 100644 src/main/java/name/zicat/leetcode/tree/Trie.java diff --git a/src/main/java/name/zicat/leetcode/graph/Graph.java b/src/main/java/name/zicat/leetcode/graph/Graph.java index 218214f..347a0f2 100644 --- a/src/main/java/name/zicat/leetcode/graph/Graph.java +++ b/src/main/java/name/zicat/leetcode/graph/Graph.java @@ -1,5 +1,7 @@ package name.zicat.leetcode.graph; +import java.util.Arrays; + /** * 1.图的定义 * 图是由顶点的有穷非空集合和顶点之间的边的集合组成, @@ -91,4 +93,80 @@ public boolean dfs(int[][] graph,int cur, int[] colors,int color){ } return true; } + + /** + * 并查集 + * 应用:看图中有没有环 + * 合并集合和 查询集合 + * 合并是把所有的父节点连接起来 + * + * 查询是 在集合中 查找 是否是同一个根节点,如果是的话,就会形成环 + * + * 每个节点 给parent -1 + * 对边进行遍历 + * 0->1 边 1 选择parent 为0 + * 2->4 4 选择 parent 为2 + * 如果 1——2 因为在两个集合里面,需要合并 1-2这两个集合 + * 1-2 需要把父节点都 连接起来, 0,2中选择 一个 作为 parent + * 那0作为 parent + * 1——>4 这个边 查找 是不是同一个 parent,他们的parent的都是0 + * 如果 再加这个边,那么一定会 形成环 + */ + + /** + * 261.以图判树 + * + * 树: + * 不包含环 + * 树所有顶点是联通的,所以边数是 顶点数-1 + * + * 输入 n=5,边列表 edges =[[0,1],[0,2],[0,3],[1,4]] + * 输出 true + * + * 输入 n=5 edges =[[0,1],[1,2],[2,3],[1,3],[1,4]] + * 输出 false + */ + + public boolean validTree(int n,int[][] edges){ + /** + * 用来保存 每个点集合的代表点 + */ + int[] parent = new int[n]; + Arrays.fill(parent,-1); + for(int[] edge:edges){ + int x = edge[0]; + int y = edge[1]; + //查找 这个集合代表是不是相等的 + x = find(parent,x); + y = find(parent,y); + if(x == y){ + return false; + } + /** + * 不相等的话就是个 union操作 + */ + parent[x]=y; + } + + /** + * 树 的第二个条件 边的 数量 等于节点数-1 + */ + return edges.length == n-1; + } + + public int find(int[] parent, int i){ + /** + * 如果自己是 代表节点 返回 i + */ + if(parent[i] == -1) + return i; + /** + * 查找他的 parent + 路径压缩的操作 + */ + return parent[i] = find(parent,parent[i]); + } + + + + } diff --git a/src/main/java/name/zicat/leetcode/sort/Sort.java b/src/main/java/name/zicat/leetcode/sort/Sort.java new file mode 100644 index 0000000..83c206d --- /dev/null +++ b/src/main/java/name/zicat/leetcode/sort/Sort.java @@ -0,0 +1,160 @@ +package name.zicat.leetcode.sort; + +/** + * 冒泡排序 + * 比较相邻两个元素,比较大小,不满足大小关系的情况下互换 + * + * 一个冒泡可以让一个元素找到相应的位置 + * + * n个元素的排序,需要冒泡n次 + * + * 平均最坏 时间复杂度O(n^2): 4,3,2,1 + * + * 选择排序 + * 遍历所有的元素,选择最小的放在第一个位置 + * 遍历未排序所有元素,选择最小的放第2个位置 + * 重复 n次 + * 平均,最坏时间复杂度O(n^2):4,3,2,1 + * + * 归并排序 + * 把数组分为两半,分别排序 + * 然后归并在一起 + * 按照同样的方法将分成两个部分 分别排序再合并 + * + * 平均,最坏时间复杂度O(nlogn):4 3 2 1 + * 从递归的角度来分析的话:第一步:遍历所有的数,两两比较进行排序,这就完成了一趟操作。它的时间复杂度为n.. + 第二步:递归完成上述操作,它的时间复杂度为logn,二分递归,所以总的就是nlogn它是稳定的算法 + * + * 12 8 5 9 + * 先平分成两组 + * [12,8] [5,9] + * + * [8,12] [5,9] + * + * 再合并 + * [5,8,9,12] + * + * 快速排序 + * 随意挑选一个元素 + * 小于此元素的排在左边,大于此元素的排在右边 + * 对于左右两部分重复此操作 + * + * 因为不是报纸挑选的元素是中值,最坏的时间复杂度是O(N^2) + * + * 平均时间复杂度 O(nlogn),正好取到的元素是 中值 就是归并,最大的数的话就是 冒泡排序 + * + * 11 12 4 3 5 9 8 取8 + * + * 4 3 5 [8] 11 12 9 取 4 和11 + * + * 3 [4] 5 [8] 9 [11] 12 + * + */ +public class Sort { + + /** + * 归并排序 + */ + public void mergeSort(int[] input){ + devide(input,0,input.length-1); + + } + + private void devide(int[] input, int low, int high) { + if(low < high){ + int mid =(low+high)/2; + devide(input,low,mid);//left half + devide(input,mid+1,high); + merge(input,low,mid,high); + } + + } + + private void merge(int[] input, int low, int mid, int high) { + int[] helper = new int[input.length]; + for(int i= low;i<=high;i++){ + //对input进行修改之前 进行copy + helper[i] = input[i]; + } + /** + * 分治完以后 + */ + int left =low; + int right = mid +1; + int i =low; + /** + * 对比两个头元素,最小的 放到 input[i]的位置 + */ + while(left<=mid && right<=high){ + if(helper[left] <=helper[right]){ + input[i++] = helper[left++]; + //然后 i再++,在移动 left和 right的位置 + } else { + input[i++] = helper[right++]; + } + } + + /** + * left和 right 可能没有走到最后的元素 + * right部分不需要copy,因为 helper就是copy的input 对应位置上的元素就是相等的 + */ + if(leftpivot){ + /** + * 已经在正确的位置 --即可 + */ + right --; + } + if(left <=right){ + /** + * 如果不是 进行交换 + */ + int temp = input[left]; + input[left] =input[right]; + input[right] = temp; + left ++; + right --; + } + } + return left; + } + + +} diff --git a/src/main/java/name/zicat/leetcode/sort/SortUtil.java b/src/main/java/name/zicat/leetcode/sort/SortUtil.java new file mode 100644 index 0000000..e5d6e67 --- /dev/null +++ b/src/main/java/name/zicat/leetcode/sort/SortUtil.java @@ -0,0 +1,9 @@ +package name.zicat.leetcode.sort; + +public class SortUtil { + /** + * 215 数组中的第K个最大的元素 + */ + + +} diff --git a/src/main/java/name/zicat/leetcode/tree/Trie.java b/src/main/java/name/zicat/leetcode/tree/Trie.java new file mode 100644 index 0000000..7c22db9 --- /dev/null +++ b/src/main/java/name/zicat/leetcode/tree/Trie.java @@ -0,0 +1,114 @@ +package name.zicat.leetcode.tree; + +import java.util.HashMap; +import java.util.Map; + +/** + * 前缀树 + * + * 又成字典树,Trie + * Search + * 用来存储 查找字符串,特别适合字符串前缀查找 + * + * 字段串的公共前缀只保存一次,节省空间 + * + * 存储字符串 组成的字典,对字符串进行前缀查找,实现剪枝的时间优化 + */ +public class Trie { + private TrieNode root; + + public Trie(){ + root = new TrieNode(); + } + /** + * root为 / + * + * / + * H F A + * E R I + * L E R + * P L E + * O + */ + + + public void insert(String word){ + HashMap child = root.children; + //对word的字母进行循环 + for(int i=0; i< word.length();i++){ + + char c = word.charAt(i); + TrieNode next; + //是否在子节点中 + if(child.containsKey(c)){ + //拿出来用来插入 下一个字母 + next = child.get(c); + } else { + //新建一个 trieNode + next = new TrieNode(c); + //更新子节点 + child.put(c,next); + } + + child = next.children; + + if(i == (word.length() -1)){ + //查找的时候就知道是 前缀还是 完整的字符串 + next.isWord =true; + } + } + + } + + /** + * 查找和前缀查找,看 isWord是 true还是 false + * @return + */ + public boolean search(String word){ + TrieNode t = searchNode(word); + if(t!=null && t.isWord){ + return true; + } + return false; + } + + public boolean startsWith(String prefix){ + if(searchNode(prefix) == null){ + return false; + } + return true; + } + + public TrieNode searchNode(String str){ + Map children = root.children; + TrieNode cur =null; + for(int i=0;i < str.length();i++){ + char c = str.charAt(i); + if(children.containsKey(c)){ + cur = children.get(c); + children = cur.children; + } else { + return null; + } + } + return cur; + + } +} + +class TrieNode { + char c; + HashMap children = new HashMap<>(); + /** + * 标注节点是不是 字符串的结尾 + */ + public boolean isWord = false; + public TrieNode(char c) { + this.c =c; + } + + public TrieNode(){ + + } + +} From 3efb0fcfa9ec03af3e5bcc9af04a176b092b9232 Mon Sep 17 00:00:00 2001 From: jessica <604284275@qq.com> Date: Fri, 4 Sep 2020 01:51:14 +0800 Subject: [PATCH 06/16] =?UTF-8?q?[Leetcode-5]=20=E5=88=86=E6=B2=BB=20?= =?UTF-8?q?=E9=80=92=E5=BD=92=E5=92=8C=20=E4=BA=8C=E5=8F=89=E6=A0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../divideAndConquer/DivideAndConquer.java | 30 +++ .../dynmaic/program/DynamicProgramming.java | 27 ++ .../java/name/zicat/leetcode/index/Index.java | 100 ++++++++ .../zicat/leetcode/recursion/Recursion.java | 60 +++++ .../zicat/leetcode/search/BinarySearch.java | 97 ++++++++ .../name/zicat/leetcode/sort/SortUtil.java | 234 ++++++++++++++++++ 6 files changed, 548 insertions(+) create mode 100644 src/main/java/name/zicat/leetcode/divideAndConquer/DivideAndConquer.java create mode 100644 src/main/java/name/zicat/leetcode/dynmaic/program/DynamicProgramming.java create mode 100644 src/main/java/name/zicat/leetcode/index/Index.java create mode 100644 src/main/java/name/zicat/leetcode/recursion/Recursion.java create mode 100644 src/main/java/name/zicat/leetcode/search/BinarySearch.java diff --git a/src/main/java/name/zicat/leetcode/divideAndConquer/DivideAndConquer.java b/src/main/java/name/zicat/leetcode/divideAndConquer/DivideAndConquer.java new file mode 100644 index 0000000..446de4e --- /dev/null +++ b/src/main/java/name/zicat/leetcode/divideAndConquer/DivideAndConquer.java @@ -0,0 +1,30 @@ +package name.zicat.leetcode.divideAndConquer; + +/** + * 分治算法 + * + * 分而治之 + * + * 归并排序和 递归排序 + * + * 把问题 分成2个 子问题,再近一步分解子问题 + * + * 再 合并 子问题的解 + * + * 通过递归实现 + * + * 二分搜索 + * + * 分治的步骤 + * + * 分解:复杂问题分解为独立,相同形式的小问题 + * 进一步分解子问题,或者计算子问题 + * + * 合并解 + * + * + * 二分搜索 + * + */ +public class DivideAndConquer { +} diff --git a/src/main/java/name/zicat/leetcode/dynmaic/program/DynamicProgramming.java b/src/main/java/name/zicat/leetcode/dynmaic/program/DynamicProgramming.java new file mode 100644 index 0000000..bd1a205 --- /dev/null +++ b/src/main/java/name/zicat/leetcode/dynmaic/program/DynamicProgramming.java @@ -0,0 +1,27 @@ +package name.zicat.leetcode.dynmaic.program; + +/** + * 动态规划 分类 + * + * + * 动态规划的 三要素 + * + * 1.状态变量 + * + * 2.递推方程 + * + * 3.初始条件 + * + * 动态规划分类 + * + * 序列型 + * + * 划分型 + * + * 博弈题目 + * + * 背包问题 + * + */ +public class DynamicProgramming { +} diff --git a/src/main/java/name/zicat/leetcode/index/Index.java b/src/main/java/name/zicat/leetcode/index/Index.java new file mode 100644 index 0000000..2af26c6 --- /dev/null +++ b/src/main/java/name/zicat/leetcode/index/Index.java @@ -0,0 +1,100 @@ +package name.zicat.leetcode.index; + +import name.zicat.leetcode.array.ListNode; + +import java.util.HashSet; + +/** + * 双指针和滑动窗口 + * + * 快慢指针 链表的问题,链表是否有环 + * 初始情况,快慢指针 都 在head + * + * 左右指针 数组或者字符串中的问题,比如二分查找 + * + * 左右指针是 维护一个区间, 主要再二分查找,翻转数组,滑动窗口 + * + * + * 滑动窗口 是 子字符串匹配的问题 + * + */ +public class Index { + + /** + * 环型链表 是否有 环,并且环的入口是啥 + * 设两指针 fast,slow 指向链表头部 head,fast 每轮走 22 步,slow 每轮走 11 步; + * 第一种结果: fast 指针走过链表末端,说明链表无环,直接返回 null; + * 输入 head =[3,2,0,-4],pos =1 + * 输出 + * + * 第二种结果: 当fast == slow时, 两指针在环中第一次相遇 。 + * + * 1.设链表共有 a+b个节点,其中链表头部到链表入口有a个节点(不计链表入口节点,链表环有b个节点 + * fast 走的步数是slow步数的2倍,即 f = 2s + * fast 比slow多走了 n 个环的长度,即 f = s + nb( 解析: 双指针都走过 a 步,然后在环内绕圈直到重合,重合时 fast 比 slow 多走 环的长度整数倍 ); + * 以上两式相减得:f = 2nb,s = nb,即fast和slow 指针分别走了 2n,n 个 环的周长 。 + * + * 如果让指针从链表头部一直向前走并统计步数k,那么所有 走到链表入口节点时的步数 是:k=a+nb(先走 aa 步到入口节点,之后每绕 11 圈环( bb 步)都会再次到入口节点)。 + * 而目前,slow 指针走过的步数为 nbnb 步。因此,我们只要想办法让 slow 再走 aa 步停下来,就可以到环的入口。 + * 但是我们不知道 a 的值,该怎么办?依然是使用双指针法。我们构建一个指针,此指针需要有以下性质:此指针和slow 一起向前走 a 步后,两者在入口节点重合。那么从哪里走到入口节点需要 aa 步?答案是链表头部head + * + * @param head + * @return + */ + public ListNode detectCycle(ListNode head){ + ListNode fast = head, slow = head; + //判断 是否有环 + while (true) { + if (fast == null || fast.next == null) return null; + fast = fast.next.next; + slow = slow.next; + if (fast == slow) break; + } + + //有环的话,把fast 重置到 head, 来走 a步寻找到 环的入口 + fast = head; + while (slow != fast) { + slow = slow.next; + fast = fast.next; + } + return fast; + + } + /** + * 无重复字符的最长子串 + * 滑动窗口 来做 + * + * 定义 两个指针和一个 set + * + *算法思路: + * windows是滑窗内字符的集合,初始化为空。从前向后移动滑窗,同时更新curr_len和max_len。 + * 如果ch已存在windows中,那么从滑窗的左端起删除字符,直到删除ch。每删除一个字符cur_len减1。 + * 将ch添加到windows中,cur_len加1。 + * 更新max_len + * + */ + public int lengthOfLongestSubstring(String s) { + if (s == null){ + return 0; + } + HashSet window = new HashSet(); + int left = 0, cur_len = 0, max_len = 0; + char[] sc = s.toCharArray(); + for (char ch: sc){ + // 从前向后删除,直到删除了ch + while (window.contains(ch)){ + window.remove(sc[left]); + left ++; + cur_len --; + } + // 添加ch + window.add(ch); + cur_len ++; + // 更新长度 + max_len = Math.max(max_len, cur_len); + } + return max_len; + } + + +} diff --git a/src/main/java/name/zicat/leetcode/recursion/Recursion.java b/src/main/java/name/zicat/leetcode/recursion/Recursion.java new file mode 100644 index 0000000..ef6c31e --- /dev/null +++ b/src/main/java/name/zicat/leetcode/recursion/Recursion.java @@ -0,0 +1,60 @@ +package name.zicat.leetcode.recursion; + +import name.zicat.leetcode.tree.TreeNode; + +import java.util.ArrayList; +import java.util.List; + +/** + * + */ +public class Recursion { + + /** + * 894.所有可能的满二叉树 + * + * 满二叉树是一类二叉树,其中每个结点恰好有0或2个子结点 + * n 如果是 偶数 是不可能为 二叉树的 + * + * 依次递归 左子树和右子树,判断 左右子树 是不是 单数 + * + */ + + public List allPossibleFBT(int N){ + List result = new ArrayList<>(); + if(N%2 == 0){ + return result; + } + //base case + if(N ==1){ + TreeNode node = new TreeNode(0); + result.add(node); + return result; + } + //去掉 root + N-=1; + for(int i=1;i left = allPossibleFBT(i); + List right = allPossibleFBT(N-i); + /** + * 把左右所有可能的组合和 root相结合 + */ + for(TreeNode lnode:left){ + for(TreeNode rnode:right) { + TreeNode root = new TreeNode(0); + root.left = lnode; + root.right = rnode; + //整体解加在 root中 再返回 + result.add(root); + } + } + } + return result; + + } +} diff --git a/src/main/java/name/zicat/leetcode/search/BinarySearch.java b/src/main/java/name/zicat/leetcode/search/BinarySearch.java new file mode 100644 index 0000000..17b5928 --- /dev/null +++ b/src/main/java/name/zicat/leetcode/search/BinarySearch.java @@ -0,0 +1,97 @@ +package name.zicat.leetcode.search; + +/** + * 二分搜索 + * + * 1.针对排好序的数据集合 + * 跟中间元素比较 + * + * 通过比较,把查找区缩小为之前的一半 + * + * 直到找到元素 + * + * 区间为0d的时候查找失败 + * + * 时间复杂度为 O(logn) 查找的复杂度是 二叉树的高度 + */ +public class BinarySearch { + + /** + * 二分法的查找 + * + * 输入是个排好序的数组 + * + * 返回 下标 + */ + + public int binarySearch(int[] input,int low,int high,int value){ + if(high >=low){ + /** + * 拿出中间值 + */ + int mid = high+(high-low)/2; + + if(input[mid] ==value) return mid; + + /** + * 在 左半部分查找 + */ + if(input[mid] > value){ + return binarySearch(input,low,mid -1,value); + } + + return binarySearch(input,mid+1,high,value); + } + return -1; + } + + /** + * 162.寻找峰值 + * + * 输入 nums = [1,2,3,1] + * 3 是 峰值 返回 索引 2 + * + * 输出 [1,2,1,3,5,6,4] + * + * 2, 6 是峰值 + * + * 峰值的左边 是 递增的 + * + * 峰值的右边 是 递减的 + * + */ + + public int findPeakElement(int[] nums){ + //查找边界条件 + if(nums == null || nums.length ==0|| nums.length ==1){ + return 0; + } + + //起始点 + int start =0; + int end = nums.length -1; + + while( start+1 nums[end]){ + return start; + } else { + return end; + } + } + + + + +} diff --git a/src/main/java/name/zicat/leetcode/sort/SortUtil.java b/src/main/java/name/zicat/leetcode/sort/SortUtil.java index e5d6e67..9a33fa5 100644 --- a/src/main/java/name/zicat/leetcode/sort/SortUtil.java +++ b/src/main/java/name/zicat/leetcode/sort/SortUtil.java @@ -1,9 +1,243 @@ package name.zicat.leetcode.sort; + +import java.util.Arrays; + public class SortUtil { /** * 215 数组中的第K个最大的元素 + * 在未排序的数组中找到 第k个最大的元素 + * + * 输入 [3,2,1,5,6,4] k=2 + * + * 输出 5 + * + * 输入 [3,2,1,2,4,5,5,6] k=4 + * + * 输出 4 + * + * 算法 + * 长度为 7 + * k =4,转化为找 第4个最小元素 (7-4+1) + * + * left->11 12 4 3 5 9 8<-right + * + * left->11 12 4 3 5<-right 9 8 [11,5]交换 + * + * 5 left->12 4 3<-right 11 9 8 [12,3]交换 + * + * 5 3 4 left->12<-right 11 9 8 left和 right重叠了 停止分割 12和8交换位置 + * + * 5 3 4 8 11 9 12 k= left+1=4 ,所以8就是答案 + * + * 如果不是 往左边 或者 右边继续找 + * + * + * + * 用 快排 最优 nlogn 选择的数正好是中间的值 最坏的是 n^2 选择的数不是 最小就是最大 + * + * pivot =8 + * nums[left] <8 往中间移动left + * nums[right] >=8 往中间移动 right + */ + + public int findKthLarges(int[] nums,int k){ + //[3,2,1,5,6,4] + //k =2 + //nums.length -k +1 =5 + if(k<1 || nums == null) { + return 0; + } + return getKth(nums.length -k +1,nums,0,nums.length -1) + + } + + /** + * 第K个最小的元素 + * @param k + * @param nums + * @param start + * @param end + * @return + */ + public int getKth(int k,int[] nums, int start, int end){ + int pivot = nums[end]; + int left = start; + int right = end; + + while(true){ + while( nums[left]=pivot && left < right){ + right --; + } + if(left == right){ + break; + } + swap1(nums,left,right); + } + + swap1(nums,left,end); + if(k == left +1){ + return pivot; + } else if( k=nums[2] < + * + * 奇数 下标小于等于前一个数, + * odd 要>=前一个数 + * even 要 <=前一个数 + * 不符合条件的 和 前一个数交换即可,不会影响前面的排序顺序 + * 3,5, 2, 1, 6, 4 + * odd even odd even odd + * */ + public void wiggleSort(int[] nums) { + for (int i = 1; i < nums.length; i++) { + // 需要交换的情况:奇数时nums[i] < nums[i - 1]或偶数时nums[i] > nums[i - 1] + if ((i % 2 == 1 && nums[i] < nums[i-1]) || + (i % 2 == 0 && nums[i] > nums[i-1])) { + int tmp = nums[i-1]; + nums[i-1] = nums[i]; + nums[i] = tmp; + } + } + } + /** + * 324 摆动排序 2 + * 给定一个无序数组,将他重新排列 + * nums[0] nums[2] mid){ + ans[r] = nums[i]; + r +=2; + } + } + } else { + l =0; + r =nums.length -2; + for(int i=0;imid){ + ans[r] =nums[i]; + r-=2; + } + } + } + for(int i=0;i0 ) r--; + points[l] = points[r]; + while(l < r && dist(points[l],pivot)<=0) l++; + points[r] =points[l]; + } + points[l] = pivot; + return l; + } + + /** + * 原点到原点的距离 + * 是根号 x^2 + y^2 + * 那判断 哪个点 离原点近 相减 >0即可 + * @param point + * @param pivot + * @return + */ + private int dist(int[] point, int[] pivot) { + return point[0] * point [0] + point[1] * point[1] + - pivot[0]* pivot[0] - pivot[1] * pivot[1]; + } } From a8808bf38ae36a32fe84ef383f8daf4bcc8bf9a6 Mon Sep 17 00:00:00 2001 From: jessica <604284275@qq.com> Date: Tue, 8 Sep 2020 15:18:34 +0800 Subject: [PATCH 07/16] =?UTF-8?q?[Leetcode-6]=20=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E8=A7=84=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dynmaic/program/DynamicProgramming.java | 319 +++++++++++++++++- .../java/name/zicat/leetcode/index/Index.java | 92 +++++ .../leetcode/recursion/RecursionUtil.java | 120 +++++++ 3 files changed, 530 insertions(+), 1 deletion(-) diff --git a/src/main/java/name/zicat/leetcode/dynmaic/program/DynamicProgramming.java b/src/main/java/name/zicat/leetcode/dynmaic/program/DynamicProgramming.java index bd1a205..e841e7d 100644 --- a/src/main/java/name/zicat/leetcode/dynmaic/program/DynamicProgramming.java +++ b/src/main/java/name/zicat/leetcode/dynmaic/program/DynamicProgramming.java @@ -14,7 +14,7 @@ * * 动态规划分类 * - * 序列型 + * 序列型 -关键词是 前 ,前i个的最大值最小值等 * * 划分型 * @@ -24,4 +24,321 @@ * */ public class DynamicProgramming { +/** + * 序列型 动态规划 + * 198 打家劫舍 + * + * 盗窃4个房屋 得到的金子 ,不可偷相邻的 + * 输入[1,2,3,1] + * 输出 1+3 =4 + * + * [2,7,9,3,1] + * + * 2+9+1 =12 + * 对于每个房屋是2种选择 + * 偷还是不偷 + * + * 最后一个房子是偷还是不偷 + * 来定义转移方程 + * + * 1.定义状态变量 dp[i] 表示盗窃前i家房子最多收益 + * 序列型 是 前i个最大值最小值 最多收益 等等 + * 从第一个开始 连续的序列 + * + * 2.转移方程: + * dp[i] =max(dp[i-2]+house[i],dp[i-1]) + * + * dp[i-2] + house[i] 表示 盗窃房间i的钱,加上盗窃前i-2房子最多收益 + * + * dp[i-1] 表示 不盗窃房间i,盗窃i-1家房子最多收益 + * + * 3.初始状态: + * dp[0] =0 + * dp[1] =house[1] 前1个房子的最多收益 就是 偷取第一个房子的钱 + * + */ + +public int rob(int[] nums){ + /** + * 边界情况 + */ + if(nums==null || nums.length ==0){ + return 0; + } + + if(nums.length ==1){ + return nums[0]; + } + + int[] dp = new int[nums.length+1]; + dp[0] =0; + dp[1] =nums[0]; + + //转移方程 + for(int i=2;i<= nums.length;i++){ + dp[i] = Math.max(dp[i-2]+nums[i-1],dp[i-1]); + } + return dp[nums.length]; } + +} + +/** + * 序列型 动态规划 + * 264,粉刷房子2 + * [[1,5,3],[2,9,4]] + * + * 从最后一步入手 + * 粉刷到最后一个房子 要保证 颜色和前面的不同,并且花费最小 + * 罗列最后的房子 粉刷的颜色,同事求出 前一个房子 不同颜色的情况下 加上最后的房子的最小值 + * + * 1.状态变量:dp[i][j] 表示粉刷前i个房子,第i个房子的颜色 j有k种可能性, + * 代表粉刷了i个房子,并且颜色为j的最小花费 + * + * 2.转移方程: dp[i][j]=min( x=0...k)(dp[i-1][x] + costs[i-1][j]|x!=j) 粉刷前i-1的花费和最后一个房子的最小值 + * x!=j 因为 相邻的房子 颜色不同 + * + * 3. 初始状态 + * dp[0][j] =0 前0个房子 粉刷各种颜色的最小收益 是0 + * dp[1][j] =cost[0][j] 前1个房子各种颜色的最小花费 + */ +//没有滚动数组的情况下 +public int minCost(int[][] costs){ + if(costs.length == 0) return 0; + int n = costs.length; + int k = costs[0].length; + int result = Integer.MAX_VALUE; + //另外开一个维度的数组 来保存颜色 + int[][] dp = new int[n+1][k]; + //对他进行初始化 + for(int i=0;i=0 && j=0 && j= sum; + } + + /** + * 背包问题 + * + * 416 分割等和子集 + * + * [1,5,11,5] + * true + * + * 数组可以分割成[1,5,5]和[11] + * + * 放入背包和 不放入背包 + * + * 数组下标 拼出来的 容积,数组长度 是 背包容积+1 + * + * 分割等和自己 + * + * 状态变量 + * dp[i] 是否可以拼出 和为 i + * + * 转移方程 dp[i]=dp[i]||dp[i-nums[j-1]]|i>=nums[j-1] + * + * 初始状态 + * dp[0]=true + * + * 完全没听懂 + */ + + public boolean canPartition(int[] nums){ + int n=nums.length; + int sum=0; + for(int i=0;i=num;j--){ + if(dp[j-num]) dp[j]=true; + } + } + return dp[sum]; + } + + + +} + + diff --git a/src/main/java/name/zicat/leetcode/index/Index.java b/src/main/java/name/zicat/leetcode/index/Index.java index 2af26c6..1792a6f 100644 --- a/src/main/java/name/zicat/leetcode/index/Index.java +++ b/src/main/java/name/zicat/leetcode/index/Index.java @@ -2,7 +2,10 @@ import name.zicat.leetcode.array.ListNode; +import java.util.ArrayDeque; +import java.util.Deque; import java.util.HashSet; +import java.util.TreeMap; /** * 双指针和滑动窗口 @@ -96,5 +99,94 @@ public int lengthOfLongestSubstring(String s) { return max_len; } + /** + * 1438 绝对差 不超过限制的最长连续子数组 + * + * nums=[8,2,4,7] limit =4 + * + * 输出2 + */ + + public int longestSubArray(int[] A,int limit){ + /** + * 两个指正 维护 窗口 + */ + int left =0; + int right; + int ans =0; + /** + * treemap 保存最大值和最小值 + * 整数值 保存为 key key中 整数 在滑动窗口中的个数保存为 value + */ + // treemap add,remove,containsKey o(nlogn) + TreeMap m = new TreeMap<>(); + /** + * 移动右指针 扩大窗口的范围 + */ + for(right =0;right limit){ + //缩小 滑动窗口 + m.put(A[left],m.get(A[left])-1); + if(m.get(A[left])==0){ + m.remove(A[left]); + } + left ++; + } + ans = Math.max(ans,right - left +1); + + } + return ans; + + } + + public int longestSubArray2(int[] A,int limit){ + // complexity O(n) + Deque maxd = new ArrayDeque<>(); + Deque mind = new ArrayDeque<>(); + int i=0,j; + int ans =0; + for(j=0;j< A.length;++j){ + while(!maxd.isEmpty() && A[j]>maxd.peekLast()) maxd.pollLast(); + while(!mind.isEmpty() && A[j] < mind.peekLast()) mind.pollLast(); + maxd.addLast(A[j]); + mind.addLast(A[j]); + while(maxd.peek() - mind.peek() > limit) { + if(maxd.peek() == A[i]) maxd.poll(); + if(mind.peek() == A[i]) mind.poll(); + ++i; + } + ans = Math.max(ans,j-i+1); + } + return ans; + } + + /** + * 1004 最大连续 1的 个数,最多可以将K个0变成1 + * 输入 A [1,1,1,0,0,0,1,1,1,1,0] K=2 + * [1,1,1,0,0,1,1,1,1,1] + * 数字从 0 翻转到1,最长的子数组长度为 6 + * + */ + + public int longestOnes(int[] A,int K) { + int left =0,right; + int ans =0; + for(right =0;right "cat sand" + "" +wordBreak("dog"); + * 或者 "cats" + "" + wordBreak("anddog") -> "cats and" + "" + wordBreak("dog"); + * + * 注意 "dog" 已经被检测过,不用重复计算,我们可以把它的结果存起来 + * 记忆化搜索, 中间结果保存在 数据结构中,遇到重复的不需要再计算 + + */ + + public List wordBreak(String s,List wordDict){ + return helper(s, wordDict, new HashMap>()); + } + + //返回所有s对应的满足条件的结果 + // s 为子串 比如 sanddog + private List helper(String s, List wordDict, HashMap> prevRes) { + //记忆化搜索的精髓,不进行重复计算 + if(prevRes.containsKey(s)){ + return prevRes.get(s); + } + + ArrayList result = new ArrayList<>(); + //容易错,不要忘记base case 定义基础解 + if(s.length() ==0){ + result.add(""); + return result; + } + + for(String word:wordDict){ + if(s.startsWith(word)){ + //递归调用剩下的部分 + List subRes = helper(s.substring(word.length()),wordDict,prevRes); + //append 到后面 + for(String sub:subRes){ + result.add(word + (sub.isEmpty()?"": " ") + sub); + } + } + } + prevRes.put(s,result); + return result; + } + /** + * 687.最长同值路径 + * 给定一个二叉树 找到最长的路径,这个路径每个节点具有相同的值 + * 递推方程 : helper(root) 表示以root为顶点的最大同值边长 + * 基础值: root ==null,返回 0 + * 每次function call 记录全局最大路径 + * + * 时间 O(n) n= number of tree nodes + */ + int ans =0; + public int longestUnivaluePath(TreeNode root){ + if(root ==null){ + return 0; + } + helperTree(root); + return ans; + } + + private int helperTree(TreeNode root) { + //terminal + if(root ==null){ + return 0; + } + int left = helperTree(root.left); + int right = helperTree(root.right); + int pleft =0; + int pright =0; + //左子树的最大边长+1 + if(root.left!=null&& root.val==root.left.val) pleft =left+1; + //右子树的最大边长+1 + if(root.right!=null && root.val==root.right.val) pright =right +1; + // + this.ans = Math.max(this.ans,pleft+pright); + //左右中的最大值 + return Math.max(pleft,pright); + + } + + /** + * 783 二叉搜索树 结点最小距离 + * + * + */ + Integer prev,ans1; + public int minDiffInBST(TreeNode root){ + ans = Integer.MAX_VALUE; + prev = null; + inOrder(root); + return ans1; + } + //一定是升序的 + public void inOrder(TreeNode node){ + if(node==null) return; + //先处理左子树 + inOrder(node.left); + //处理当前的节点 + if(prev!=null){ + ans1 = Math.min(ans,node.val-prev); + } + prev =node.val; + //再处理 右子树 + inOrder(node.right); + } + } From 562035abbb642bf7406bb4389a9a9fcdf6cbb546 Mon Sep 17 00:00:00 2001 From: jessica <604284275@qq.com> Date: Wed, 9 Sep 2020 17:28:25 +0800 Subject: [PATCH 08/16] [Leetcode-7] tree and recursion --- .../leetcode/recursion/RecursionUtil.java | 27 ++++++++ .../name/zicat/leetcode/tree/TreeUtils.java | 62 +++++++++++++++++++ 2 files changed, 89 insertions(+) diff --git a/src/main/java/name/zicat/leetcode/recursion/RecursionUtil.java b/src/main/java/name/zicat/leetcode/recursion/RecursionUtil.java index 24b3fd5..92f71d9 100644 --- a/src/main/java/name/zicat/leetcode/recursion/RecursionUtil.java +++ b/src/main/java/name/zicat/leetcode/recursion/RecursionUtil.java @@ -251,5 +251,32 @@ public void inOrder(TreeNode node){ inOrder(node.right); } + /** + * 1137 第N个 泰波那契数 + * n=4 + * 输出4 + * T_3 =0 +1 +1 =2 + * T_4 = 1+ 1+ 2 =4 + * + */ + HashMap cache = new HashMap<>(); + public int tribonacci(int n){ + if(cache.containsKey(n)){ + return cache.get(n); + } + if(n ==0){ + cache.put(n,0); + return 0; + } + if(n==1 || n==2){ + cache.put(n,1); + return 1; + } + int result = tribonacci(n-1) + tribonacci(n-2) + tribonacci(n-3); + cache.put(n,result); + return result; + + } + } diff --git a/src/main/java/name/zicat/leetcode/tree/TreeUtils.java b/src/main/java/name/zicat/leetcode/tree/TreeUtils.java index 9608110..fc6b058 100644 --- a/src/main/java/name/zicat/leetcode/tree/TreeUtils.java +++ b/src/main/java/name/zicat/leetcode/tree/TreeUtils.java @@ -2,6 +2,7 @@ import java.util.Arrays; +import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -389,6 +390,51 @@ private TreeNode helper(int lowerBound,int upperBound){ return root; } + /** + * 425.单词方块 + * + * 单词序列 + */ + + /** + * N 叉数的最大深度 + */ + + public int maxDepth(Node root){ + if(root ==null){ + return 0; + } else if(root.children.isEmpty()) { + return 1; + } else { + List height = new LinkedList(); + for(Node node:root.children){ + height.add(maxDepth(node)); + } + return Collections.max(height)+1; + } + + } + /** + * 二叉树最长连续序列 + */ + + private int maxLength = 0; + public int longestConsecutive(TreeNode root) { + dfs(root, null, 0); + return maxLength; + } + + private void dfs(TreeNode p, TreeNode parent, int length) { + if (p == null) return; + length = (parent != null && p.val == parent.val + 1) ? length + 1 : 1; + maxLength = Math.max(maxLength, length); + dfs(p.left, p, length); + dfs(p.right, p, length); + } + + + + @@ -405,3 +451,19 @@ private TreeNode helper(int lowerBound,int upperBound){ } + +class Node { + public int val; + public List children; + + public Node() {} + + public Node(int _val) { + val = _val; + } + + public Node(int _val, List _children) { + val = _val; + children = _children; + } +}; From 2aeee6e669dbb7756b3afd47dce23467394142ce Mon Sep 17 00:00:00 2001 From: jessica <604284275@qq.com> Date: Sat, 12 Sep 2020 17:54:49 +0800 Subject: [PATCH 09/16] [Leetcode-8] fix error and add index case --- .../divideAndConquer/DivideAndConquer.java | 42 ++++ .../dynmaic/program/DynamicProgramming.java | 1 - .../java/name/zicat/leetcode/index/Index.java | 210 ++++++++++++++++++ .../java/name/zicat/leetcode/queue/Queue.java | 10 +- .../name/zicat/leetcode/sort/SortUtil.java | 2 +- .../zicat/leetcode/stack/MedianFinder.java | 10 +- .../java/name/zicat/leetcode/stack/Stack.java | 2 +- 7 files changed, 265 insertions(+), 12 deletions(-) diff --git a/src/main/java/name/zicat/leetcode/divideAndConquer/DivideAndConquer.java b/src/main/java/name/zicat/leetcode/divideAndConquer/DivideAndConquer.java index 446de4e..4c0a632 100644 --- a/src/main/java/name/zicat/leetcode/divideAndConquer/DivideAndConquer.java +++ b/src/main/java/name/zicat/leetcode/divideAndConquer/DivideAndConquer.java @@ -27,4 +27,46 @@ * */ public class DivideAndConquer { + /** + * 1292 元素和小于等于阈值的正方形的最大边长 + * 给一个大小为 m x n的矩阵mat 和一个整数阈值threshold + * 请返回元素总和小于或等于阈值的正方形区域的最大边长 + * 没有则返回0 + * + * 输入 mat =[[1,1,3,2,4,3,2],[1,1,3,2,4,3,2],[1,1,3,2,4,3,2]] + * + * threshold =4 + * + * 总和小于 4的 正方形 最大边长 为 2 + * + * 怎么 算正方形 + * 先固定 左上角的值 比如 [0,0], 并计算边长 为1,2,3的正方形 + * + */ + + /** + * 二分查找 + * 给定一个n个元素有序的升序整形数组 和一个目标值 target,如果目标值存在 返回下标 + * + */ + public int search(int[] nums,int target){ + return searchBinaryDivide(nums,0,nums.length-1,target); + } + + public int searchBinaryDivide(int[] nums, int start, int end,int target){ + if(start> end){ + return -1; + } + + + int mid = start + (end-start)/2; + if(nums[mid] > target){ + return searchBinaryDivide(nums,start,mid-1,target); + } else if(nums[mid]< target){ + return searchBinaryDivide(nums,mid+1,end,target); + } else { + return mid; + } + } } + diff --git a/src/main/java/name/zicat/leetcode/dynmaic/program/DynamicProgramming.java b/src/main/java/name/zicat/leetcode/dynmaic/program/DynamicProgramming.java index e841e7d..3c52d61 100644 --- a/src/main/java/name/zicat/leetcode/dynmaic/program/DynamicProgramming.java +++ b/src/main/java/name/zicat/leetcode/dynmaic/program/DynamicProgramming.java @@ -81,7 +81,6 @@ public int rob(int[] nums){ return dp[nums.length]; } -} /** * 序列型 动态规划 diff --git a/src/main/java/name/zicat/leetcode/index/Index.java b/src/main/java/name/zicat/leetcode/index/Index.java index 1792a6f..d58abe2 100644 --- a/src/main/java/name/zicat/leetcode/index/Index.java +++ b/src/main/java/name/zicat/leetcode/index/Index.java @@ -4,7 +4,9 @@ import java.util.ArrayDeque; import java.util.Deque; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.TreeMap; /** @@ -187,6 +189,214 @@ public int longestOnes(int[] A,int K) { } return ans; } + /** + * 反转字符串 + * 输入 [h,e,l,l,o] + * 输出 [o,l,l,e,h] + */ + public void reverseString(char[] s){ + int left =0; + int right = s.length -1; + while(left <= right){ + char temp = s[right]; + s[right] = s[left]; + s[left] = temp; + left ++; + right --; + } + + } + + /** + * 和相同的二元子数组 + * + * 由若干0和1组成的数组A中,有多少个和为S的非空子数组 + * + * 输入 A=[1,0,1,0,1] S=2 + * 输出 :4 + * ['1,0,1',0,1] + * ['1,0,1,0',1] + * [1,'0,1,0,1'] + * [1,0,'1,0,1'] + */ + + /** + * 双指针 效率低 + * @param A + * @param S + * @return + */ + public static int numSubArraysWithSum(int[] A,int S){ + + int left; + int right=0; + int sum =0; + int count =0; + for(;right=0){ + sum = sum +A[left]; + if(sum ==S){ + count = count +1; + } else if(sum >S){ + break; + } + left --; + } + sum =0; + } + return count; + } + + /** + * 三指针法 + * 和相同的二元子数组 + * + * 我们遍历区间的右端点 j,同时维护四个变量: + * + * sum_lo:A[i_lo..j] 的值; + * + * sum_hi:A[i_hi..j] 的值; + * + * i_lo:最小的满足 sum_lo <= S 的 i; + * + * i_hi:最大的满足 sum_hi <= S 的 i。 + * + * 例如,当数组 A 为 [1,0,0,1,0,1],S 的值为 2 。当 j = 5 时,i_lo 的值为 1,i_hi 的值为 3。对于每一个 j,和为 S 的非空子数组的数目为 i_hi - i_lo + 1。 + */ + + public static int numSubArrayWithSum(int[] A,int S){ + int iLo = 0,iHi=0; + int sumLo=0,sumHi =0; + int ans =0; + for(int j=0;jS){ + sumLo-=A[iLo++]; + //相当于 sumLo-=A[iLo],iLo++ + } + sumHi +=A[j]; + /** + * Hi 两种情况 + * A[iHi] =1的话只要判断 sumHi>s即可 + * A[iHi] =0的话,要判断 sumHi ==S + */ + while(iHi S ||sumHi ==S &&A[iHi]==0)) + sumHi -=A[iHi++]; + + if(sumLo ==S){ + ans += iHi-iLo +1; + } + } + return ans; + } + + /** + * K个不同整数的子数组 + * 给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定独立的子数组为好子数组。 + * + * (例如,[1,2,3,1,2] 中有 3 个不同的整数:1,2,以及 3。) + * + * 返回 A 中好子数组的数目。 + * 输入:A = [1,2,1,2,3], K = 2 + * 输出:7 + * 解释:恰好由 2 个不同整数组成的子数组:[1,2], [2,1], [1,2], [2,3], [1,2,1], [2,1,2], [1,2,1,2]. + * + * 输入:A = [1,2,1,3,4], K = 3 + * 输出:3 + * 解释:恰好由 3 个不同整数组成的子数组:[1,2,1,3], [2,1,3], [1,3,4]. + * + */ + /** + * 暴力解法 会超时 + * @param A + * @param K + * @return + */ + public static int subArrayWithKDistinct(int[] A,int K){ + HashSet set = new HashSet(); + int left; + int right=0; + int count =0; + for(;right=0){ + set.add(A[left]); + if(set.size() ==K){ + count = count +1; + } else if(set.size()>K){ + break; + } + left --; + } + set.clear(); + } + return count; + } + + /** + * 滑动窗口解法 + * 我们要维护两个滑动窗口以维护 + * 每一个滑动窗口能够计算窗口内有多少个不同的数字,并且支持像队列一样动态的增加 / 移除元素 + * + */ + + public int subarraysWithKDistinct(int[] A, int K) { + Window window1 = new Window(); + Window window2 = new Window(); + int ans = 0, left1 = 0, left2 = 0; + + for (int right = 0; right < A.length; ++right) { + int x = A[right]; + window1.add(x); + window2.add(x); + + while (window1.different() > K) + window1.remove(A[left1++]); + while (window2.different() >= K) + window2.remove(A[left2++]); + + ans += left2 - left1; + } + + return ans; + } + + + public static void main(String[] args) { + int[] A = {1,0,1,0,1}; + System.out.println("A = " + numSubArrayWithSum(A, 2)); + } + + + + +} + +class Window { + Map count; + int nonzero; + + Window() { + count = new HashMap(); + nonzero = 0; + } + + void add(int x) { + count.put(x, count.getOrDefault(x, 0) + 1); + if (count.get(x) == 1) + nonzero++; + } + + void remove(int x) { + count.put(x, count.get(x) - 1); + if (count.get(x) == 0) + nonzero--; + } + + int different() { + return nonzero; + } } diff --git a/src/main/java/name/zicat/leetcode/queue/Queue.java b/src/main/java/name/zicat/leetcode/queue/Queue.java index 6525ad9..5b3cc94 100644 --- a/src/main/java/name/zicat/leetcode/queue/Queue.java +++ b/src/main/java/name/zicat/leetcode/queue/Queue.java @@ -11,18 +11,18 @@ private static class QueueNode { private T data; private QueueNode next; - public QueueNode(T data){this.data = data} + public QueueNode(T data){this.data = data;} } - private QueueNode first; - private QueueNode last; + private QueueNode first; + private QueueNode last; /** * 从队首取出元素 * @return */ public T remove(){ - if(first == null) throw EmptyQueueException(); + if(first == null) throw new RuntimeException(); T value = first.data; first = first.next; @@ -51,7 +51,7 @@ public void add(T item) { * @return */ public T peek(){ - if(first == null) throw new EmptyQueueException(); + if(first == null) throw new RuntimeException(); return first.data; } diff --git a/src/main/java/name/zicat/leetcode/sort/SortUtil.java b/src/main/java/name/zicat/leetcode/sort/SortUtil.java index 9a33fa5..34148c8 100644 --- a/src/main/java/name/zicat/leetcode/sort/SortUtil.java +++ b/src/main/java/name/zicat/leetcode/sort/SortUtil.java @@ -48,7 +48,7 @@ public int findKthLarges(int[] nums,int k){ if(k<1 || nums == null) { return 0; } - return getKth(nums.length -k +1,nums,0,nums.length -1) + return getKth(nums.length -k +1,nums,0,nums.length -1); } diff --git a/src/main/java/name/zicat/leetcode/stack/MedianFinder.java b/src/main/java/name/zicat/leetcode/stack/MedianFinder.java index 5922830..237afbe 100644 --- a/src/main/java/name/zicat/leetcode/stack/MedianFinder.java +++ b/src/main/java/name/zicat/leetcode/stack/MedianFinder.java @@ -2,6 +2,8 @@ import name.zicat.leetcode.queue.PriorityQueueTest; +import java.util.PriorityQueue; + /** * 295 数据流的中位数 * @@ -21,16 +23,16 @@ public class MedianFinder { * 当前大顶堆和小顶堆的元素个数之和 */ private int count; - private PriorityQueueTest maxheap; - private PriorityQueueTest minheap; + private PriorityQueue maxheap; + private PriorityQueue minheap; /** * initialize your data structure here. */ public MedianFinder() { count = 0; - maxheap = new PriorityQueueTest<>((x, y) -> y - x); - minheap = new PriorityQueueTest<>(); + maxheap = new PriorityQueue<>((x, y) -> y - x); + minheap = new PriorityQueue<>(); } public void addNum(int num) { diff --git a/src/main/java/name/zicat/leetcode/stack/Stack.java b/src/main/java/name/zicat/leetcode/stack/Stack.java index 5372383..270e27c 100644 --- a/src/main/java/name/zicat/leetcode/stack/Stack.java +++ b/src/main/java/name/zicat/leetcode/stack/Stack.java @@ -33,7 +33,7 @@ public StackNode(T data){ * @return */ public T pop(){ - if(top == null) throw EmptyStackException(); + if(top == null) throw new RuntimeException(); T value = top.data; /** * 栈顶的指针指向 下一个 From 436a0662d4c14bd7c04f4e3f0e6f4ad1b024a71f Mon Sep 17 00:00:00 2001 From: jessica <604284275@qq.com> Date: Mon, 14 Sep 2020 01:01:37 +0800 Subject: [PATCH 10/16] [Leetcode-9] add sort --- .../name/zicat/leetcode/sort/SortUtil.java | 126 ++++++++++++++++++ 1 file changed, 126 insertions(+) diff --git a/src/main/java/name/zicat/leetcode/sort/SortUtil.java b/src/main/java/name/zicat/leetcode/sort/SortUtil.java index 34148c8..eb0ecb3 100644 --- a/src/main/java/name/zicat/leetcode/sort/SortUtil.java +++ b/src/main/java/name/zicat/leetcode/sort/SortUtil.java @@ -1,7 +1,9 @@ package name.zicat.leetcode.sort; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; public class SortUtil { /** @@ -240,4 +242,128 @@ private int dist(int[] point, int[] pivot) { return point[0] * point [0] + point[1] * point[1] - pivot[0]* pivot[0] - pivot[1] * pivot[1]; } + + /** + * 按奇偶排序数组 + * 给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。 + * + * 对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。 + * + * 你可以返回任何满足上述条件的数组作为答案 + * 输入:[4,2,5,7] + * 输出:[4,5,2,7] + * 解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。 + */ + public static int[] sortArrayByParity2(int[] A){ + int odd =1; + Integer notoddIndex =null; + Integer noteventIndex =null; + int even =0; + while(odd < A.length){ + if(notoddIndex==null){ + if(A[odd] %2 !=1){ + notoddIndex = odd; + } else { + odd = odd + 2; + } + } + + if(noteventIndex ==null && even < A.length){ + if(A[even] % 2 !=0){ + noteventIndex = even; + } else { + even = even + 2; + } + } + + if(noteventIndex!=null && notoddIndex!=null){ + int temp = A[notoddIndex]; + A[notoddIndex] = A[noteventIndex]; + A[noteventIndex] = temp; + noteventIndex = null; + notoddIndex = null; + } + + } + return A; + + } + + /** + * 按奇偶排序数组 + * 双指针 正解 + * 时间复杂度: O(N),其中 N 是 A 的长度。 + */ + public static int[] sortArrayByParity3(int[] A) { + int j = 1; + for (int i = 0; i < A.length; i += 2) + if (A[i] % 2 == 1) { + while (A[j] % 2 == 1) + j += 2; + + // Swap A[i] and A[j] + int tmp = A[i]; + A[i] = A[j]; + A[j] = tmp; + } + + return A; + } + + /** + * 将矩阵按对角线排序 + * 对角线 是 横坐标和 纵纵坐标+1 + * @param + */ + public int[][] diagonalSort(int[][] mat) { + // 行数 + int m = mat.length; + // 列数 + int n = mat[0].length; + // 主对角线的条数 + int dLen = m + n - 1; + + // 每一条对角线都创建一个动态数组 + ArrayList[] diagonal = new ArrayList[dLen]; + for (int i = 0; i < dLen; i++) { + diagonal[i] = new ArrayList<>(m); + } + + // 遍历原始矩阵,把原始矩阵中的元素放进对应的动态数组中 + // 主对角线上元素的特点是:纵坐标 - 横坐标 = 定值 + // 加上偏移 m - 1 是为了能够放进数组中 + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + diagonal[j - i + (m - 1)].add(mat[i][j]); + } + } + + // 对每一个对角线上的动态数组分别进行升序排序 + for (int i = 0; i < dLen; i++) { + Collections.sort(diagonal[i]); + } + + int[][] res = new int[m][n]; + + // 对角线数组上还未取出的元素的下标,初始化的时候均为 0 + int[] next = new int[dLen]; + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + // 对角线的坐标 + int index = j - i + (m - 1); + // 记录结果 + res[i][j] = diagonal[index].get(next[index]); + // 维护 next 数组的值 + next[index]++; + } + } + return res; + } + + + + public static void main(String[] args) { + int[] A = {3,1,3,2,2,1,1,1,2,0,0,4,0,1,0,1,1,1,2,2}; + System.out.println("A = " + Arrays.toString(sortArrayByParity2(A)));; + } } From e28f454d93ff70c9e0cd1314a928c49cc43016e4 Mon Sep 17 00:00:00 2001 From: jessica <604284275@qq.com> Date: Fri, 25 Sep 2020 02:13:42 +0800 Subject: [PATCH 11/16] =?UTF-8?q?[Leetcode-10]=20add=20=E7=BA=A2=E9=BB=91?= =?UTF-8?q?=E6=A0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zicat/leetcode/bytedance/TestUtil.java | 61 ++++++++++++++++ .../name/zicat/leetcode/tree/TreeUtils.java | 71 +++++++++++++++++++ .../java/name/zicat/leetcode/tree/Trie.java | 28 +++++++- 3 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 src/main/java/name/zicat/leetcode/bytedance/TestUtil.java diff --git a/src/main/java/name/zicat/leetcode/bytedance/TestUtil.java b/src/main/java/name/zicat/leetcode/bytedance/TestUtil.java new file mode 100644 index 0000000..4f03665 --- /dev/null +++ b/src/main/java/name/zicat/leetcode/bytedance/TestUtil.java @@ -0,0 +1,61 @@ +package name.zicat.leetcode.bytedance; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +public class TestUtil { + + public static void main(String[] args) { + } + /** + * + */ + + public static String[] findWords(String[] words) { + char[] first = {'Q','W','E','R','T','Y','U','I','O','P'}; + char[] second = {'A','S','D','F','G','H','J','K','L'}; + char[] third = {'Z','X','C','V','B','N','M'}; + HashSet firstSet = new HashSet(); + HashSet secondSet = new HashSet(); + HashSet thirdSet = new HashSet(); + + for(char firstStr: first){ + firstSet.add(firstStr); + } + for(char secondStr: second){ + secondSet.add(secondStr); + } + for(char thirdStr: third){ + thirdSet.add(thirdStr); + } + List arrayList = new ArrayList<>(); + for(String word:words){ + boolean firstBool = true; + boolean secondBool = true; + boolean thirdBool = true; + for(int i=0;i child = root.children; //对word的字母进行循环 for(int i=0; i< word.length();i++){ @@ -46,6 +48,7 @@ public void insert(String word){ } else { //新建一个 trieNode next = new TrieNode(c); + next.end = index; //更新子节点 child.put(c,next); } @@ -94,11 +97,34 @@ public TrieNode searchNode(String str){ return cur; } + public String dfs() { + String ans = ""; + Stack stack = new Stack(); + stack.push(root); + while (!stack.empty()) { + TrieNode node = stack.pop(); + if (node.end > 0 || node == root) { + if (node != root) { + String word = words[node.end - 1]; + if (word.length() > ans.length() || + word.length() == ans.length() && word.compareTo(ans) < 0) { + ans = word; + } + } + for (TrieNode nei: node.children.values()) { + stack.push(nei); + } + } + } + return ans; + } + } class TrieNode { char c; HashMap children = new HashMap<>(); + int end; /** * 标注节点是不是 字符串的结尾 */ From fa36e402dd82c98f25b2809acb762488a6901628 Mon Sep 17 00:00:00 2001 From: jessica <604284275@qq.com> Date: Sun, 1 Nov 2020 03:34:33 +0800 Subject: [PATCH 12/16] =?UTF-8?q?[Leetcode-11]=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../name/zicat/leetcode/array/ArrayUtils.java | 183 +++++++++++++- .../name/zicat/leetcode/array/LRUCache.java | 2 +- .../java/name/zicat/leetcode/index/Index.java | 51 +++- .../leetcode/queue/PriorityQueueTest.java | 234 +++++++++++++++++- .../leetcode/recursion/RecursionUtil.java | 8 + .../name/zicat/leetcode/sort/SortUtil.java | 1 + .../name/zicat/leetcode/tree/TreeUtils.java | 16 -- 7 files changed, 465 insertions(+), 30 deletions(-) diff --git a/src/main/java/name/zicat/leetcode/array/ArrayUtils.java b/src/main/java/name/zicat/leetcode/array/ArrayUtils.java index e473f05..0630e69 100644 --- a/src/main/java/name/zicat/leetcode/array/ArrayUtils.java +++ b/src/main/java/name/zicat/leetcode/array/ArrayUtils.java @@ -1,11 +1,7 @@ package name.zicat.leetcode.array; -import sun.misc.OSEnvironment; - import java.util.HashMap; -import java.util.HashSet; -import java.util.List; /** * @author zhangjun @@ -26,12 +22,16 @@ public static void main(String[] args) { listNode4.next = listNode5; removeNthFromEnd(listNode1,2);*/ - int[] sum = {1,1,1,2,2,3}; + /* int[] sum = {1,1,1,2,2,3}; int len = removeDuplicateN2(sum); for(int i=0;i< len;i++){ System.out.println(sum[i]); - } + }*/ + + int[] nums1 = {1,2}; + int[] nums2 = {3,4,5}; + System.out.println("nums2 = " + findMedianSortedArrays2(nums1,nums2)); //subArraySumK(sum,2); @@ -149,6 +149,143 @@ public static final int countInAscendingOrderArrayLessThenK(int[] a, int k) { return countInAscendingOrderArrayLessThenK(a, 0, a.length, k); } + /** + * 4.寻找两个数组中的中位数 + * 且时间复杂度是 log(m + n),那就必须要用到 二分之类的 + * m+ n 是奇数的情况 就是 要找到 (m+n)/2 如果是 偶数的情况是 (m+n)/2-1和 (m+n)/2 + * + * 第一种方式 先合并数组再返回 中位数 + */ + + public static final double findMedianSortedArrays(int[] nums1,int[] nums2){ + int m = nums1.length; + int n = nums2.length; + int resultCount = m+n; + int[] resultNums = new int[resultCount] ; + int mOffset =0; + int nOffset =0; + int resultOffset =0; + /** + * 合并两个有序数组 + */ + while(resultOffset< m+n ){ + + /** + * 左数组已经全部进入新数组中,把右数组中的剩下的放入数组即可 + */ + if (mOffset == m) { + while(nOffset nums2[nOffset]){ + resultNums[resultOffset++] = nums2[nOffset++]; + } else { + resultNums[resultOffset++] = nums1[mOffset++]; + } + + } + + /** + * m+ n 是奇数的情况 就是 要找到 (m+n)/2 如果是 偶数的情况是 (m+n)/2-1和 (m+n)/2 + */ + if(resultCount %2 == 0){ + return (resultNums[resultCount/2-1]+resultNums[resultCount/2])/2.0; + } else { + return resultNums[resultCount/2]; + } + + + } + /** + * 4.寻找两个数的中位数 不开数组空间,前面一半排序即可 + * + * m + n 是奇数的情况 就是 要排序到 (m+n)/2 如果是 偶数的情况是 (m+n)/2-1和 (m+n)/2 + */ + public static final double findMedianSortedArrays2(int[] nums1,int[] nums2){ + int m = nums1.length; + int n = nums2.length; + int mOffset =0; + int nOffset =0; + int resultCount = m+n; + /** + * 设置两个点保存数据,left保证 (m+n)/2-1 right 保存 (m+n)/2 + */ + int left =0; + int right =0; + int countOffset =0; + /** + * + */ + while(countOffset<=resultCount/2 ){ + //left 是 right的前一个值 + left = right; + /** + * 左边数据到 + */ + if(mOffset == m){ + int diff = resultCount/2 - countOffset; + if(diff==0){ + right = nums2[nOffset+ diff]; + } else if(diff >0){ + left = nums2[nOffset + diff -1]; + right = nums2[nOffset+ diff]; + } + break; + } + + if(nOffset == n){ + int diff = resultCount/2 - countOffset; + if(diff==0){ + right = nums1[nOffset+ diff]; + } else if(diff >0){ + left = nums1[nOffset + diff -1]; + right = nums1[nOffset+ diff]; + } + break; + } + + /** + * 较小的值放入right中,并且数据位移和 计算的指正也往后位移 + */ + if(nums1[mOffset] < nums2[nOffset]){ + right = nums1[mOffset++]; + } else { + right = nums2[nOffset++]; + } + ++ countOffset; + + } + + /** + * m+ n 是奇数的情况 就是 要找到 (m+n)/2 如果是 偶数的情况是 (m+n)/2-1和 (m+n)/2 + */ + if(resultCount %2 == 0){ + return (left + right)/2.0; + } else { + return right; + } + } + + + + /** * https://leetcode-cn.com/problems/move-zeroes * move 0 to the end of array, @@ -162,6 +299,10 @@ public static final int[] moveZeroes (int[] nums){ * 记录下一个非0元素的位置 */ int j=0; + /** + * 这个循环只处理 当前不是 0的值, + * 如果 i和 j的值 有差异 说明之前 有值一定0的值,并且他的位置 是j,那就要做交换 把j的值是0,i是 非0做个交换 + */ for (int i=0;i< nums.length;i++) { /** * 不是 0的话 把元素 放到 j的位置 @@ -186,7 +327,11 @@ public static final int[] moveZeroes (int[] nums){ } /** - * 209长度最小的子数组. 子数组中的值累加 必须 >n. + * 209 长度最小的子数组. 子数组中的值累加 必须 >n. + * 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0 + * 输入:s = 7, nums = [2,3,1,2,4,3] + * 输出:2 + * 解释:子数组 [4,3] 是该条件下的长度最小的子数组。 */ public static final int minLengthArray(int[] nums, int n){ @@ -250,6 +395,12 @@ public static int minSubArrayLen(int s, int[] nums) { /** * 26.删除排序数组中的重复项 + * 给定数组 nums = [1,1,2], + * + * 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 + * + * 你不需要考虑数组中超出新长度后面的元素 + * */ public static int removeDuplicate(int[] nums) { int i=0; @@ -278,6 +429,13 @@ public static int removeDuplicate(int[] nums) { * input [1,1,1] 2 * * output [1,1] [1,1] 2 + * 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。 + * + * 示例 1 : + * + * 输入:nums = [1,1,1], k = 2 + * 输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。 + * * * 想办法判断它的值减去K的值是否存在于前缀和数组中即可。 */ @@ -303,6 +461,9 @@ public static int subArraySumK(int[] nums,int k) { * 想办法判断它的值减去K的值是否存在于前缀和数组中即可 */ + /** + * key 为子数组的和, value为 这个值的数量 + */ HashMap hashMap=new HashMap(); for(int preSubSum: preSum){ @@ -433,6 +594,10 @@ public static ListNode reverseLinkedList(ListNode prev,ListNode next){ * input 2->1->3->5->6->4->7->NULL * output 2->3->6->7->1->5->4->NULL * + * 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 + * + * 请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数 + * * 用原地算法 即用 带头人来做 */ public static ListNode oddEvenList(ListNode head) { @@ -495,7 +660,9 @@ public static ListNode removeNthFromEnd(ListNode head,int n ){ end = end.next; if(count == n){ findnode = head; - + /** + * + */ } else if(count > n){ temp = findnode; findnodePre = temp; diff --git a/src/main/java/name/zicat/leetcode/array/LRUCache.java b/src/main/java/name/zicat/leetcode/array/LRUCache.java index c66e2ca..0b2aec0 100644 --- a/src/main/java/name/zicat/leetcode/array/LRUCache.java +++ b/src/main/java/name/zicat/leetcode/array/LRUCache.java @@ -36,7 +36,7 @@ */ public class LRUCache { /** - * key + * key 和 节点 这个 节点 是在一个 双向链链表里面,有 pre和 next * value ,Node的地址 */ HashMap map = new HashMap<>(); diff --git a/src/main/java/name/zicat/leetcode/index/Index.java b/src/main/java/name/zicat/leetcode/index/Index.java index d58abe2..eee51f2 100644 --- a/src/main/java/name/zicat/leetcode/index/Index.java +++ b/src/main/java/name/zicat/leetcode/index/Index.java @@ -66,9 +66,28 @@ public ListNode detectCycle(ListNode head){ } /** - * 无重复字符的最长子串 + * 3.无重复字符的最长子串 * 滑动窗口 来做 * + * 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 + * + * 示例 1: + * + * 输入: "abcabcbb" + * 输出: 3 + * 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 + * 示例 2: + * + * 输入: "bbbbb" + * 输出: 1 + * 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 + * 示例 3: + * + * 输入: "pwwkew" + * 输出: 3 + * 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 + *   请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。 + * * 定义 两个指针和一个 set * *算法思路: @@ -79,6 +98,9 @@ public ListNode detectCycle(ListNode head){ * */ public int lengthOfLongestSubstring(String s) { + /** + * 临界情况 + */ if (s == null){ return 0; } @@ -107,6 +129,23 @@ public int lengthOfLongestSubstring(String s) { * nums=[8,2,4,7] limit =4 * * 输出2 + * + * 示例 1: + * + * 输入:nums = [8,2,4,7], limit = 4 + * 输出:2 + * 解释:所有子数组如下: + * [8] 最大绝对差 |8-8| = 0 <= 4. + * [8,2] 最大绝对差 |8-2| = 6 > 4. + * [8,2,4] 最大绝对差 |8-2| = 6 > 4. + * [8,2,4,7] 最大绝对差 |8-2| = 6 > 4. + * [2] 最大绝对差 |2-2| = 0 <= 4. + * [2,4] 最大绝对差 |2-4| = 2 <= 4. + * [2,4,7] 最大绝对差 |2-7| = 5 > 4. + * [4] 最大绝对差 |4-4| = 0 <= 4. + * [4,7] 最大绝对差 |4-7| = 3 <= 4. + * [7] 最大绝对差 |7-7| = 0 <= 4. + * 因此,满足题意的最长子数组的长度为 2 。 */ public int longestSubArray(int[] A,int limit){ @@ -145,6 +184,12 @@ public int longestSubArray(int[] A,int limit){ } + /** + * 看不懂 + * @param A + * @param limit + * @return + */ public int longestSubArray2(int[] A,int limit){ // complexity O(n) Deque maxd = new ArrayDeque<>(); @@ -180,6 +225,7 @@ public int longestOnes(int[] A,int K) { for(right =0;right 1 + */ for(;right=0){ diff --git a/src/main/java/name/zicat/leetcode/queue/PriorityQueueTest.java b/src/main/java/name/zicat/leetcode/queue/PriorityQueueTest.java index 5a9a58f..e8fbd85 100644 --- a/src/main/java/name/zicat/leetcode/queue/PriorityQueueTest.java +++ b/src/main/java/name/zicat/leetcode/queue/PriorityQueueTest.java @@ -1,5 +1,8 @@ package name.zicat.leetcode.queue; +import java.util.Arrays; +import java.util.Comparator; + /** * 优先队列 * @@ -10,24 +13,247 @@ * 3.可以自定义优先级 * * 4.基于堆实现的优先队列的插入复杂度是O(logN) + * + * 堆是个 二叉堆 是一个完全二叉树 + * + * 根节点总是大于左右子节点(大顶堆), 或者是小于左右子节点(小顶堆) + * + * 保证每次取出的元素都是队列中权值最小的,这里涉及到了大小关系,元素大小的评判可以通过元素自身的自然顺序(使用默认的比较器),也可以通过构造时传入的比较器 + * + * leftNo = parentNo*2+1 + * + * rightNo = parentNo*2+2 + * + * parentNo = (nodeNo-1)/2 */ public class PriorityQueueTest { - public void add(T data) { + /** + * 默认初始容量 + */ + private static final int DEFAULT_INITIAL_CAPACITY = 11; + + + /** + * 维护一个队列,因为基于二叉堆来实现优先队列,queue[i] 的子节点为 queue[2*i +1]/queue[2*i +2] + */ + transient Object[] queue; + + /** + * 优先级队列中的 数据条数 + */ + private int size =0; + + /** + * + * @param data + */ + + private final Comparator< ? super T> comparator; + + + /** + * 被修改的次数 + */ + transient int modCount =0; + + /** + * The maximum size of array to allocate. + * Some VMs reserve some header words in an array. + * Attempts to allocate larger arrays may result in + * OutOfMemoryError: Requested array size exceeds VM limit + */ + private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; + + public PriorityQueueTest(Comparator comparator){ + this.queue = new Object[DEFAULT_INITIAL_CAPACITY]; + this.comparator = comparator; + } + + public PriorityQueueTest(){ + this.comparator = null; + } + + + public boolean add(T data) { + if(data ==null) + throw new NullPointerException(); + modCount ++; + int i = size; + if(i>=queue.length) + grow(i+1); + size = i+1; + if( i ==0) + queue[0] = data; + else + siftUp(i,data); + return true; + } + + /** + * Inserts item x at position k, maintaining heap invariant by + * promoting x up the tree until it is greater than or equal to + * its parent, or is the root. + * + * To simplify and speed up coercions and comparisons. the + * Comparable and Comparator versions are separated into different + * methods that are otherwise identical. (Similarly for siftDown.) + * + * @param k the position to fill + * @param x the item to insert + */ + private void siftUp(int k, T x) { + siftUpUsingComparator(k, x); + } + private void siftUpUsingComparator(int k, T x) { + + /** + * >>>表示不带符号向右移动二进制数,移动后前面统统补0;两个箭头表示带符号移动, + * + * 没有<<<这种运算符,因为左移都是补零,没有正负数的区别。 + * + * 如 -12 的二进制为:1111 1111 1111 1111 1111 1111 1111 0100; + * + * -12 >> 3 即带符号右移3位,结果是:1111 1111 1111 1111 1111 1111 1111 1110,十进制为: -2; + * + * -12 >>> 3 就是右移三位,前面补零,为:0001 1111 1111 1111 1111 1111 1111 1110,十进制为:536870910 + * + * 插入的数据 可能影响 大顶堆或者小顶堆,需要和 parent进行一个交换 保证顶点是最小的 + */ + while (k > 0) { + //先找到其parent的编号 + int parent = (k - 1) >>> 1; + Object e = queue[parent]; + if (comparator.compare(x, (T) e) >= 0) + break; + queue[k] = e; + k = parent; + } + queue[k] = x; + + } + private void grow(int minCapacity) { + int oldCapacity = queue.length; + // Double size if small; else grow by 50% + int newCapacity = oldCapacity + ((oldCapacity < 64) ? + (oldCapacity + 2) : + (oldCapacity >> 1)); + // overflow-conscious code + if (newCapacity - MAX_ARRAY_SIZE > 0) + newCapacity = hugeCapacity(minCapacity); + queue = Arrays.copyOf(queue, newCapacity); + } + + private static int hugeCapacity(int minCapacity) { + if (minCapacity < 0) // overflow + throw new OutOfMemoryError(); + return (minCapacity > MAX_ARRAY_SIZE) ? + Integer.MAX_VALUE : + MAX_ARRAY_SIZE; } public T peek(){ - return null; + return (size == 0) ? null : (T) queue[0]; } public T poll(){ - return null; + if (size == 0) + return null; + int s = --size; + modCount++; + T result = (T) queue[0]; + T x = (T) queue[s]; + queue[s] = null; + if (s != 0) + siftDown(0, x); + return result; } public int size(){ - return 0; + return size; } + + /** + * Removes a single instance of the specified element from this queue, + * if it is present. More formally, removes an element {@code e} such + * that {@code o.equals(e)}, if this queue contains one or more such + * elements. Returns {@code true} if and only if this queue contained + * the specified element (or equivalently, if this queue changed as a + * result of the call). + * + * @param o element to be removed from this queue, if present + * @return {@code true} if this queue changed as a result of the call + */ + public boolean remove(Object o) { + int i = indexOf(o); + if (i == -1) + return false; + else { + removeAt(i); + return true; + } + } + + private int indexOf(Object o) { + if (o != null) { + for (int i = 0; i < size; i++) + if (o.equals(queue[i])) + return i; + } + return -1; + } + + /** + * Removes the ith element from queue. + * + * Normally this method leaves the elements at up to i-1, + * inclusive, untouched. Under these circumstances, it returns + * null. Occasionally, in order to maintain the heap invariant, + * it must swap a later element of the list with one earlier than + * i. Under these circumstances, this method returns the element + * that was previously at the end of the list and is now at some + * position before i. This fact is used by iterator.remove so as to + * avoid missing traversing elements. + */ + @SuppressWarnings("unchecked") + private T removeAt(int i) { + // assert i >= 0 && i < size; + modCount++; + int s = --size; + if (s == i) // removed last element + queue[i] = null; + else { + T moved = (T) queue[s]; + queue[s] = null; + siftDown(i, moved); + if (queue[i] == moved) { + siftUp(i, moved); + if (queue[i] != moved) + return moved; + } + } + return null; + } + + private void siftDown(int k, T x) { + int half = size >>> 1; + while (k < half) { + int child = (k << 1) + 1; + Object c = queue[child]; + int right = child + 1; + if (right < size && + comparator.compare((T) c, (T) queue[right]) > 0) + c = queue[child = right]; + if (comparator.compare(x, (T) c) <= 0) + break; + queue[k] = c; + k = child; + } + queue[k] = x; + } + + } diff --git a/src/main/java/name/zicat/leetcode/recursion/RecursionUtil.java b/src/main/java/name/zicat/leetcode/recursion/RecursionUtil.java index 92f71d9..507dfba 100644 --- a/src/main/java/name/zicat/leetcode/recursion/RecursionUtil.java +++ b/src/main/java/name/zicat/leetcode/recursion/RecursionUtil.java @@ -54,6 +54,14 @@ public static void main(String[] args) { /** * 括号生成 leetcode 22 + * 输入:n = 3 + * 输出:[ + * "((()))", + * "(()())", + * "(())()", + * "()(())", + * "()()()" + * ] */ public static List generateParenthesis(int n){ //_generate(0,2 * n,""); diff --git a/src/main/java/name/zicat/leetcode/sort/SortUtil.java b/src/main/java/name/zicat/leetcode/sort/SortUtil.java index eb0ecb3..57008ce 100644 --- a/src/main/java/name/zicat/leetcode/sort/SortUtil.java +++ b/src/main/java/name/zicat/leetcode/sort/SortUtil.java @@ -20,6 +20,7 @@ public class SortUtil { * * 算法 * 长度为 7 + * * k =4,转化为找 第4个最小元素 (7-4+1) * * left->11 12 4 3 5 9 8<-right diff --git a/src/main/java/name/zicat/leetcode/tree/TreeUtils.java b/src/main/java/name/zicat/leetcode/tree/TreeUtils.java index 86ff2f2..ace832b 100644 --- a/src/main/java/name/zicat/leetcode/tree/TreeUtils.java +++ b/src/main/java/name/zicat/leetcode/tree/TreeUtils.java @@ -505,22 +505,6 @@ public static TreeNode invertTree(TreeNode root) { */ - - - - - - - - - - - - - - - - } class Node { From 6474f237b827a9dbf749ab9ce9d3fe3a3f88790f Mon Sep 17 00:00:00 2001 From: jessica <604284275@qq.com> Date: Sun, 1 Nov 2020 22:28:12 +0800 Subject: [PATCH 13/16] =?UTF-8?q?[Leetcode-12]=20=E8=B4=AA=E5=BF=83?= =?UTF-8?q?=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../name/zicat/leetcode/alibaba/TestUtil.java | 158 ++++++++++++++++++ ...0\346\200\201\350\247\204\345\210\222.png" | Bin 0 -> 276106 bytes 2 files changed, 158 insertions(+) create mode 100644 src/main/java/name/zicat/leetcode/alibaba/TestUtil.java create mode 100644 "src/main/java/name/zicat/leetcode/dynmaic/program/\345\212\250\346\200\201\350\247\204\345\210\222.png" diff --git a/src/main/java/name/zicat/leetcode/alibaba/TestUtil.java b/src/main/java/name/zicat/leetcode/alibaba/TestUtil.java new file mode 100644 index 0000000..dac3ff9 --- /dev/null +++ b/src/main/java/name/zicat/leetcode/alibaba/TestUtil.java @@ -0,0 +1,158 @@ +package name.zicat.leetcode.alibaba; + +import name.zicat.leetcode.tree.TreeNode; + +public class TestUtil { + public static void main(String[] args) throws Exception{ + + } + + + /** + * 1035 不相交的线 + * + * 基本思路就是:dp[i][j]表示A截止到i,B截止到j点,此时的最大连线数 + * + * 转移方程为: + * + * 当A[i] == B[j]时: dp[i][j] = dp[i - 1][j - 1] + 1 + * 当A[i] != B[j]时: dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + * + * 是个九宫图 + * + */ + + public static int maxUncrossedLines(int[] A,int[] B) { + int[][] dp = new int[A.length+1][B.length+1]; + for(int i =0;i这个结点待覆盖 + * 1=>这个结点已经覆盖 + * 2=>这个结点上安装了相机 + * + * 建立数学模型来描述问题 + * 把求解的问题分成若干个子问题 + * 对每个子问题求解,得到子问题的局部最优解 + * 把子问题的解局部最优解合成原来问题的一个解 + */ + static int res; + public static int minCameraCover(TreeNode root){ + if(lrd(root)==0){ + res ++; + } + return res; + + + } + + public static int lrd(TreeNode node){ + if(node ==null){ + return 1; + } + + int left = lrd(node.left); + int right = lrd(node.right); + /** + * 左孩子和右孩子的覆盖情况,都待覆盖的话 + */ + if(left == 0|| right ==0){ + res ++; + return 2; + } + /** + * 左右孩子 已经覆盖的情况,那当前节点 待覆盖 + */ + if(left == 1 && right ==1){ + return 0; + } + /** + * 左右孩子中间 有一个 是 装了 相机,那该节点已经覆盖 + */ + if(left + right >=3){ + return 1; + } + + return -1; + } + + +} diff --git "a/src/main/java/name/zicat/leetcode/dynmaic/program/\345\212\250\346\200\201\350\247\204\345\210\222.png" "b/src/main/java/name/zicat/leetcode/dynmaic/program/\345\212\250\346\200\201\350\247\204\345\210\222.png" new file mode 100644 index 0000000000000000000000000000000000000000..4222fdc67ee28933be3f7b75232918aed8ec9f25 GIT binary patch literal 276106 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

3pcTV^MUFE@I( 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

a?_!|J4tAb#;C$l#@fG2%F_?U<4U=rY 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

  • TjfB*ZXs^1moP1V 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 literal 0 HcmV?d00001 From 20c2d7813a5ab3c64d2a3aa4c15e0c1159195c2f Mon Sep 17 00:00:00 2001 From: jessica <604284275@qq.com> Date: Mon, 23 Nov 2020 02:59:45 +0800 Subject: [PATCH 14/16] [Leetcode-13] add lock --- .../name/zicat/leetcode/alibaba/TestUtil.java | 80 +++++++++++++++++++ .../zicat/leetcode/microsoft/ListNode.java | 8 ++ .../zicat/leetcode/microsoft/TestUtil.java | 77 ++++++++++++++++++ .../name/zicat/leetcode/queue/Deques.java | 1 + .../queue/LockBoundedBlockingQueue.java | 56 +++++++++++++ .../queue/SyncBoundedBlockingQueue.java | 62 ++++++++++++++ .../name/zicat/leetcode/tree/TreeUtils.java | 25 ++++++ 7 files changed, 309 insertions(+) create mode 100644 src/main/java/name/zicat/leetcode/microsoft/ListNode.java create mode 100644 src/main/java/name/zicat/leetcode/microsoft/TestUtil.java create mode 100644 src/main/java/name/zicat/leetcode/queue/LockBoundedBlockingQueue.java create mode 100644 src/main/java/name/zicat/leetcode/queue/SyncBoundedBlockingQueue.java diff --git a/src/main/java/name/zicat/leetcode/alibaba/TestUtil.java b/src/main/java/name/zicat/leetcode/alibaba/TestUtil.java index dac3ff9..fac1f5b 100644 --- a/src/main/java/name/zicat/leetcode/alibaba/TestUtil.java +++ b/src/main/java/name/zicat/leetcode/alibaba/TestUtil.java @@ -5,6 +5,9 @@ public class TestUtil { public static void main(String[] args) throws Exception{ + int[] A = {5,-3,5}; + System.out.println("maxSubArraySumCircular(A) = " + maxSubArraySumCircular(A)); + } @@ -154,5 +157,82 @@ public static int lrd(TreeNode node){ return -1; } + /** + * 918 + * 给定一个由整数数组 A 表示的环形数组 C,求 C 的非空子数组的最大可能和。 + * + * 在此处,环形数组意味着数组的末端将会与开头相连呈环状。(形式上,当0 <= i < A.length 时 C[i] = A[i],且当 i >= 0 时 C[i+A.length] = C[i]) + * + * 示例 1: + * + * 输入:[1,-2,3,-2] + * 输出:3 + * 解释:从子数组 [3] 得到最大和 3 + * 示例 2: + * + * 输入:[5,-3,5] + * 输出:10 + * 解释:从子数组 [5,5] 得到最大和 5 + 5 = 10 + * 示例 3: + * + * 输入:[3,-1,2,-1] + * 输出:4 + * 解释:从子数组 [2,-1,3] 得到最大和 2 + (-1) + 3 = 4 + * 示例 4: + * + * 输入:[3,-2,2,-3] + * 输出:3 + * 解释:从子数组 [3] 和 [3,-2,2] 都可以得到最大和 3 + * 示例 5: + * + * 输入:[-2,-3,-1] + * 输出:-1 + * 解释:从子数组 [-1] 得到最大和 -1 + */ + + public static int maxSubArraySumCircular(int[] A) { + int[] A2= new int[A.length *2]; + int n = A.length; + + + /** + * + */ + for(int i=0;i