diff --git a/MaxArea.java b/MaxArea.java new file mode 100644 index 00000000..4ab720e0 --- /dev/null +++ b/MaxArea.java @@ -0,0 +1,20 @@ +//Time Complexity : O(n) +//Space Complexity : O(1) + +public class MaxArea { + public int maxArea(int[] height) { + int left = 0; + int right = height.length - 1; + int max = 0; + + while (left < right) { + int area = (right - left) * Math.min(height[left], height[right]); + max = Math.max(max, area); + + if(height[left] < height[right]) left++; + else right--; + } + + return max; + } +} diff --git a/SortColors.java b/SortColors.java new file mode 100644 index 00000000..72da0260 --- /dev/null +++ b/SortColors.java @@ -0,0 +1,32 @@ +//Time Complexity : O(n) +//Space Complexity : O(1) + +public class SortColors { + public void sortColors(int[] nums) { + + int low = 0; + int mid = 0; + int high = nums.length - 1; + + while(mid<=high) { + if(nums[mid] == 0) { + swap(nums, mid, low); + mid++; + low++; + } + else if (nums[mid] == 2){ + swap(nums, mid, high); + high--; + } else { + mid++; + } + } + + } + + private void swap(int[] nums, int a, int b) { + int temp = nums[a]; + nums[a] = nums[b]; + nums[b] = temp; + } +} diff --git a/ThreeSum.java b/ThreeSum.java new file mode 100644 index 00000000..cd0e9702 --- /dev/null +++ b/ThreeSum.java @@ -0,0 +1,47 @@ +//Time Complexity : O(n^2) +//Space Complexity : O(1) + + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class ThreeSum { + + public List> threeSum(int[] nums) { + Arrays.sort(nums); + List> result = new ArrayList<>(); + for(int i = 0; i < nums.length ; i++) { + if(nums[i] > 0) break; + if(i > 0 && nums[i-1] == nums[i]) { + continue; + } + + int left = i+1; + int right = nums.length - 1; + + while (left < right) { + int curr = nums[left] + nums[right] + nums[i]; + if (curr == 0) { + List li = new ArrayList<>(List.of(nums[i],nums[left],nums[right])); + result.add(li); + left++; + right--; + while(left< right && nums[left] == nums[left-1]) { + left++; + } + while(left< right && nums[right] == nums[right+1]) { + right--; + } + } + else if(curr > 0) { + right--; + } else { + left++; + } + } + } + return result; + } + +}