diff --git a/3sum/sora0319.java b/3sum/sora0319.java new file mode 100644 index 000000000..2685edef3 --- /dev/null +++ b/3sum/sora0319.java @@ -0,0 +1,37 @@ +import java.util.*; + +class Solution { + public List> threeSum(int[] nums) { + List> result = new ArrayList<>(); + Arrays.sort(nums); + int n = nums.length; + + for (int i = 0; i < n - 2; i++) { + if (i > 0 && nums[i] == nums[i - 1]) continue; + + int left = i + 1; + int right = n - 1; + + while (left < right) { + int sum = nums[i] + nums[left] + nums[right]; + + if (sum == 0) { + result.add(Arrays.asList(nums[i], nums[left], nums[right])); + + while (left < right && nums[left] == nums[left + 1]) left++; + while (left < right && nums[right] == nums[right - 1]) right--; + + left++; + right--; + } else if (sum < 0) { + left++; + } else { + right--; + } + } + } + + return result; + } +} + diff --git a/climbing-stairs/sora0319.java b/climbing-stairs/sora0319.java new file mode 100644 index 000000000..f226e4bce --- /dev/null +++ b/climbing-stairs/sora0319.java @@ -0,0 +1,14 @@ +class Solution { + public int climbStairs(int n) { + int[] stairs = new int[n+1]; + + stairs[0] = 1; + stairs[1] = 1; + + for(int i = 2; i <= n; i++){ + stairs[i] = stairs[i-1] + stairs[i-2]; + } + return stairs[n]; + } +} + diff --git a/product-of-array-except-self/sora0319.java b/product-of-array-except-self/sora0319.java new file mode 100644 index 000000000..c094dd3d4 --- /dev/null +++ b/product-of-array-except-self/sora0319.java @@ -0,0 +1,21 @@ +class Solution { + public int[] productExceptSelf(int[] nums) { + int[] answer = new int[nums.length]; + int multi = nums[0]; + answer[0] = 1; + + for(int i = 1; i < nums.length; i++){ + answer[i] = multi; + multi *= nums[i]; + } + + multi = nums[nums.length-1]; + for(int i = nums.length-2; i >= 0; i--){ + answer[i] *= multi; + multi *= nums[i]; + } + + return answer; + } +} + diff --git a/valid-anagram/sora0319.java b/valid-anagram/sora0319.java new file mode 100644 index 000000000..c758956e3 --- /dev/null +++ b/valid-anagram/sora0319.java @@ -0,0 +1,20 @@ +class Solution { + public boolean isAnagram(String s, String t) { + int[] character = new int[26]; + if(s.length() != t.length()) return false; + + for(int i = 0; i < t.length(); i++){ + int place = t.charAt(i) - 'a'; + character[place]++; + } + + for(int i = 0; i < s.length(); i++){ + int place = s.charAt(i) - 'a'; + if(character[place] <= 0) return false; + character[place]--; + } + return true; + } +} + + diff --git a/validate-binary-search-tree/sora0319.java b/validate-binary-search-tree/sora0319.java new file mode 100644 index 000000000..af9aa9104 --- /dev/null +++ b/validate-binary-search-tree/sora0319.java @@ -0,0 +1,13 @@ +class Solution { + public boolean isValidBST(TreeNode root) { + if(root==null||(root.left==null&&root.right==null)) return true; + return isvalid(root,Long.MIN_VALUE,Long.MAX_VALUE); + } + public boolean isvalid(TreeNode root,long min,long max) + { + if(root==null) return true; + if(root.val<=min||root.val>=max) return false; + return isvalid(root.left,min,root.val)&&isvalid(root.right,root.val,max); + } +} +