File tree 5 files changed +171
-0
lines changed
product-of-array-except-self
validate-binary-search-tree
5 files changed +171
-0
lines changed Original file line number Diff line number Diff line change
1
+ import java .util .ArrayList ;
2
+ import java .util .HashMap ;
3
+ import java .util .HashSet ;
4
+ import java .util .List ;
5
+ import java .util .Map ;
6
+ import java .util .Set ;
7
+
8
+ class Solution {
9
+ public List <List <Integer >> threeSum (int [] nums ) {
10
+ List <List <Integer >> result = new ArrayList <>();
11
+
12
+ Map <Integer , Integer > counter = new HashMap <>();
13
+ for (int num : nums ) {
14
+ int count = counter .getOrDefault (num , 0 );
15
+ counter .put (num , count + 1 );
16
+ }
17
+
18
+ Set <Integer > keySet = new HashSet <>(counter .keySet ());
19
+ for (int num1 : keySet ) {
20
+ int num1Count = counter .get (num1 );
21
+ if (num1Count > 1 ) {
22
+ counter .put (num1 , num1Count - 1 );
23
+ } else {
24
+ counter .remove (num1 );
25
+ }
26
+
27
+ for (int num2 : counter .keySet ()) {
28
+ int num3 = -num1 - num2 ;
29
+ int count = counter .getOrDefault (num3 , 0 );
30
+ if (((num2 == num3 && count >= 2 ) || (num2 != num3 && count >= 1 )) && num3 >= num2 ) {
31
+ result .add (List .of (num1 , num2 , num3 ));
32
+ }
33
+ }
34
+
35
+ counter .remove (num1 );
36
+ }
37
+
38
+ return result ;
39
+ }
40
+ }
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public int climbStairs (int n ) {
3
+ int [] result = new int [n + 1 ];
4
+ result [0 ] = 1 ;
5
+ result [1 ] = 1 ;
6
+
7
+ for (int i = 2 ; i < n + 1 ; i ++) {
8
+ result [i ] = result [i - 1 ] + result [i - 2 ];
9
+ }
10
+
11
+ return result [n ];
12
+ }
13
+ }
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public int [] productExceptSelf (int [] nums ) {
3
+ int [] left = new int [nums .length + 1 ];
4
+ int [] right = new int [nums .length + 1 ];
5
+ left [0 ] = 1 ;
6
+ right [nums .length ] = 1 ;
7
+
8
+ for (int i = 0 ; i < nums .length ; i ++) {
9
+ left [i + 1 ] = left [i ] * nums [i ];
10
+ right [nums .length - i - 1 ] = right [nums .length - i ] * nums [nums .length - i - 1 ];
11
+ }
12
+
13
+ int [] result = new int [nums .length ];
14
+ for (int i = 0 ; i < nums .length ; i ++) {
15
+ result [i ] = left [i ] * right [i + 1 ];
16
+ }
17
+ return result ;
18
+ }
19
+
20
+ public int [] productExceptSelfV2 (int [] nums ) {
21
+ int [] result = new int [nums .length ];
22
+
23
+ int curr = 1 ;
24
+ result [0 ] = curr ;
25
+ for (int i = 1 ; i < nums .length ; i ++) {
26
+ curr *= nums [i - 1 ];
27
+ result [i ] = curr ;
28
+ }
29
+
30
+ curr = 1 ;
31
+ result [nums .length - 1 ] *= curr ;
32
+ for (int i = nums .length - 2 ; i >= 0 ; i --) {
33
+ curr *= nums [i + 1 ];
34
+ result [i ] *= curr ;
35
+ }
36
+
37
+ return result ;
38
+ }
39
+ }
Original file line number Diff line number Diff line change
1
+ import java .util .HashMap ;
2
+ import java .util .Map ;
3
+
4
+ class Solution {
5
+ public boolean isAnagram (String s , String t ) {
6
+ Map <Character , Integer > sMap = new HashMap <>();
7
+ for (char c : s .toCharArray ()) {
8
+ Integer count = sMap .getOrDefault (c , 0 );
9
+ sMap .put (c , count + 1 );
10
+ }
11
+
12
+ Map <Character , Integer > tMap = new HashMap <>();
13
+ for (char c : t .toCharArray ()) {
14
+ Integer count = tMap .getOrDefault (c , 0 );
15
+ tMap .put (c , count + 1 );
16
+ }
17
+
18
+ for (char key : sMap .keySet ()) {
19
+ if (!sMap .get (key ).equals (tMap .get (key ))) {
20
+ return false ;
21
+ }
22
+ tMap .remove (key );
23
+ }
24
+
25
+ return tMap .isEmpty ();
26
+ }
27
+ }
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public boolean isValidBST (TreeNode root ) {
3
+ return (root .left == null || isValidBSTMax (root .left , root .val ))
4
+ && (root .right == null || isValidBSTMin (root .right , root .val ));
5
+ }
6
+
7
+ private boolean isValidBSTMax (TreeNode root , int max ) {
8
+ if (root .val >= max ) {
9
+ return false ;
10
+ }
11
+
12
+ return (root .left == null || isValidBSTMax (root .left , root .val ))
13
+ && (root .right == null || isValidBSTMinMax (root .right , root .val , max ));
14
+ }
15
+
16
+ private boolean isValidBSTMin (TreeNode root , int min ) {
17
+ if (root .val <= min ) {
18
+ return false ;
19
+ }
20
+
21
+ return (root .left == null || isValidBSTMinMax (root .left , min , root .val ))
22
+ && (root .right == null || isValidBSTMin (root .right , root .val ));
23
+ }
24
+
25
+ private boolean isValidBSTMinMax (TreeNode root , int min , int max ) {
26
+ if (root .val >= max || root .val <= min ) {
27
+ return false ;
28
+ }
29
+
30
+ return (root .left == null || isValidBSTMinMax (root .left , min , root .val ))
31
+ && (root .right == null || isValidBSTMinMax (root .right , root .val , max ));
32
+ }
33
+
34
+ public class TreeNode {
35
+ int val ;
36
+ TreeNode left ;
37
+ TreeNode right ;
38
+
39
+ TreeNode () {
40
+ }
41
+
42
+ TreeNode (int val ) {
43
+ this .val = val ;
44
+ }
45
+
46
+ TreeNode (int val , TreeNode left , TreeNode right ) {
47
+ this .val = val ;
48
+ this .left = left ;
49
+ this .right = right ;
50
+ }
51
+ }
52
+ }
You can’t perform that action at this time.
0 commit comments