diff --git a/invert-binary-tree/se6816.java b/invert-binary-tree/se6816.java new file mode 100644 index 0000000000..9d2b7c493a --- /dev/null +++ b/invert-binary-tree/se6816.java @@ -0,0 +1,21 @@ +class Solution { + public TreeNode invertTree(TreeNode root) { + if(root == null) return root; + Queue que = new ArrayDeque<>(); + que.add(root); + + while(!que.isEmpty()) { + TreeNode node = que.poll(); + TreeNode tempNode = node.left; + node.left = node.right; + node.right = tempNode; + if(node.left != null) { + que.add(node.left); + } + if(node.right != null) { + que.add(node.right); + } + } + return root; + } +} diff --git a/jump-game/se6816.java b/jump-game/se6816.java new file mode 100644 index 0000000000..6eed680d64 --- /dev/null +++ b/jump-game/se6816.java @@ -0,0 +1,27 @@ +class Solution { + public boolean canJump(int[] nums) { + boolean[] visited= new boolean[nums.length]; + dfs(visited, nums, 0); + return visited[nums.length - 1]; + } + public void dfs(boolean[] visited, int[] nums, int target) { + if(visited[nums.length -1]) { + return; + } + if(visited[target]) { + return; + } + + visited[target] = true; + + int maxDist = nums[target]; + for(int i = maxDist; i > 0; i--) { + int nextIdx = target + i; + if(nextIdx > nums.length - 1) { + continue; + } + + dfs(visited, nums, nextIdx); + } + } +} diff --git a/merge-k-sorted-lists/se6816.java b/merge-k-sorted-lists/se6816.java new file mode 100644 index 0000000000..c844d041eb --- /dev/null +++ b/merge-k-sorted-lists/se6816.java @@ -0,0 +1,28 @@ + +class Solution { + public ListNode mergeKLists(ListNode[] lists) { + ListNode list= new ListNode(0); // head + ListNode curr=list; + PriorityQueue pq=new PriorityQueue((l1, l2)->{ + return l1.val - l2.val; + }); + for(int i=0; i= nums[0]) { + return binarySearch(target, nums, 0, firstIdx); + } else { + return binarySearch(target, nums, firstIdx, nums.length - 1); + } + } + + public int binarySearch(int[] nums) { + int start = 0; + int end = nums.length -1; + while(start < end) { + int mid = (start + end) / 2; + if(nums[mid] < nums[end]) { + end = mid; + } else { + start = mid + 1; + } + } + return start; + } + + public int binarySearch(int target, int[] nums, int start, int end) { + int result = -1; + while(start <= end) { + int mid = (start + end) / 2; + if(nums[mid] > target) { + end = mid - 1; + } else if(nums[mid] < target){ + start = mid + 1; + } else { + result = mid; + break; + } + } + + return result; + } + + +}