File tree Expand file tree Collapse file tree 5 files changed +171
-0
lines changed
product-of-array-except-self
validate-binary-search-tree Expand file tree Collapse file 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