Skip to content

Commit fb2d646

Browse files
committed
Updated Java Solution
1 parent b89cfe2 commit fb2d646

File tree

9 files changed

+108
-110
lines changed

9 files changed

+108
-110
lines changed

Java/soln-array-problems/3sum.java

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,27 +11,34 @@
1111
import java.io.*;
1212

1313
class Solution {
14-
public List<List<Integer>> threeSum(int[] arr) {
15-
Set<List<Integer>> set=new HashSet<>();
16-
if(arr.length<3)
17-
return new ArrayList<>(set);
18-
19-
Arrays.sort(arr);
20-
for (int i=0; i<arr.length; i++){
21-
int j=i+1;
22-
int k=arr.length-1;
23-
while(j<k){
24-
int sum=arr[i]+arr[j]+arr[k];
25-
if(sum==0){
26-
List<Integer> triplets=Arrays.asList(arr[i],arr[j],arr[k]);
27-
set.add(triplets);
28-
}
29-
if(sum<0)
30-
j++;
14+
public List<List<Integer>> threeSum(int[] nums) {
15+
List<List<Integer>> triplets=new ArrayList<>();
16+
int n=nums.length;
17+
if(n<3)
18+
return triplets;
19+
Arrays.sort(nums);
20+
21+
for (int i=0; i<n-2; i++){
22+
if(i>0 && nums[i]==nums[i-1])
23+
continue;
24+
25+
int left=i+1;
26+
int right=n-1;
27+
while(left<right){
28+
int sum=nums[i]+nums[left]+nums[right];
29+
if(sum==0){
30+
triplets.add(Arrays.asList(nums[i],nums[left],nums[right]));
31+
32+
left++;
33+
while(left<n && nums[left]==nums[left-1])
34+
left++;
35+
}
36+
else if(sum<0)
37+
left++;
3138
else
32-
k--;
39+
right--;
3340
}
34-
}
35-
return new ArrayList<>(set);
41+
}
42+
return triplets;
3643
}
37-
}
44+
}

Java/soln-array-problems/maximum-subarray.java

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,14 @@
1313
class Solution {
1414
public int maxSubArray(int[] a) {
1515
int size=a.length;
16-
int max_so_far = Integer.MIN_VALUE,
17-
max_ending_here = 0,start = 0, end = 0, s = 0;
16+
int max_sum = Integer.MIN_VALUE;
17+
int cur_sum = 0;
1818

1919
for (int i = 0; i < size; i++){
20-
max_ending_here += a[i];
21-
if (max_ending_here < 0){
22-
max_ending_here = 0;
23-
s = i + 1;
24-
}
25-
26-
if (max_so_far < max_ending_here){
27-
max_so_far = max_ending_here;
28-
start = s;
29-
end = i;
30-
}
20+
cur_sum=Math.max(a[i],cur_sum+a[i]);
21+
max_sum=Math.max(max_sum, cur_sum);
22+
3123
}
32-
return max_so_far;
24+
return max_sum;
3325
}
34-
}
26+
}

Java/soln-backtracking-problems/permutations-ii.java

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,27 +11,32 @@
1111
import java.io.*;
1212

1313
class Solution {
14+
HashMap<Integer,Integer> counts=new HashMap<>();
1415
public List<List<Integer>> permuteUnique(int[] nums) {
1516
List<List<Integer>> result=new ArrayList<>();
16-
possiblePermutation(nums,new ArrayList<>(),new ArrayList<>(),result);
17+
18+
HashMap<Integer,Integer> counter=new HashMap<>();
19+
for(int num:nums)
20+
counter.put(num,counter.getOrDefault(num,0)+1);
21+
22+
possiblePermutation(nums,new ArrayList<>(),counter,result);
1723
return result;
1824
}
1925

20-
public void possiblePermutation(int nums[], List<Integer> arrangement,List<Integer> occur_indx, List<List<Integer>> result){
21-
if(arrangement.size()==nums.length && !result.contains(arrangement)){
22-
result.add(new ArrayList<>(arrangement));
23-
}
26+
public void possiblePermutation(int nums[], List<Integer> cur,HashMap<Integer,Integer> counter, List<List<Integer>> result){
27+
if(cur.size()==nums.length)
28+
result.add(new ArrayList<>(cur));
29+
2430
else{
25-
for(int i=0;i<nums.length;i++){
26-
if(occur_indx.contains(i))
27-
continue;
28-
29-
arrangement.add(nums[i]);
30-
occur_indx.add(i);
31-
possiblePermutation(nums,arrangement,occur_indx,result);
32-
arrangement.remove(arrangement.size()-1);
33-
occur_indx.remove(occur_indx.size()-1);
31+
for(int num : counter.keySet()){
32+
if(counter.get(num) > 0){
33+
counter.put(num,counter.get(num)-1);
34+
cur.add(num);
35+
possiblePermutation(nums,cur,counter,result);
36+
cur.remove(cur.size()-1);
37+
counter.put(num,counter.get(num)+1);
38+
}
3439
}
3540
}
3641
}
37-
}
42+
}

Java/soln-backtracking-problems/permutations.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,19 @@ public List<List<Integer>> permute(int[] nums) {
1515
List<List<Integer>> result=new ArrayList<>();
1616
possiblePermutation(nums,new ArrayList<>(),result);
1717
return result;
18-
}
18+
}
1919

20-
public void possiblePermutation(int nums[], List<Integer> arrangement, List<List<Integer>> result){
21-
if(arrangement.size()==nums.length){
22-
result.add(new ArrayList<>(arrangement));
23-
}
20+
public void possiblePermutation(int nums[], List<Integer> cur, List<List<Integer>> result){
21+
if(cur.size()==nums.length)
22+
result.add(new ArrayList<>(cur));
23+
2424
else{
2525
for(int i=0;i<nums.length;i++){
26-
if(arrangement.contains(nums[i]))
26+
if(cur.contains(nums[i]))
2727
continue;
28-
arrangement.add(nums[i]);
29-
possiblePermutation(nums,arrangement,result);
30-
arrangement.remove(arrangement.size()-1);
28+
cur.add(nums[i]);
29+
possiblePermutation(nums,cur,result);
30+
cur.remove(cur.size()-1);
3131
}
3232
}
3333
}

Java/soln-backtracking-problems/subsets-ii.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,18 @@ public List<List<Integer>> subsetsWithDup(int[] nums) {
1414
Arrays.sort(nums);
1515
List<List<Integer>> subsets=new ArrayList<>();
1616
generateSubsets(0,nums, new ArrayList<Integer>(),subsets);
17-
return subsets;
17+
return subsets;
18+
1819
}
1920

20-
public void generateSubsets(int index, int[] nums, List<Integer> current, List<List<Integer>> subsets){
21-
if(!subsets.contains(current))
22-
subsets.add(new ArrayList<>(current));
21+
public void generateSubsets(int index, int[] nums, List<Integer> cur, List<List<Integer>> subsets){
22+
subsets.add(new ArrayList<>(cur));
2323
for(int i=index;i<nums.length;i++){
24-
current.add(nums[i]);
25-
generateSubsets(i+1,nums,current,subsets);
26-
current.remove(current.size()-1);
24+
if(i>index && nums[i]==nums[i-1])
25+
continue;
26+
cur.add(nums[i]);
27+
generateSubsets(i+1,nums,cur,subsets);
28+
cur.remove(cur.size()-1);
2729
}
2830
}
2931
}

Java/soln-backtracking-problems/subsets.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ public List<List<Integer>> subsets(int[] nums) {
1717

1818
}
1919

20-
public void generateSubsets(int index, int[] nums, List<Integer> current, List<List<Integer>> subsets){
21-
subsets.add(new ArrayList<>(current));
20+
public void generateSubsets(int index, int[] nums, List<Integer> cur, List<List<Integer>> subsets){
21+
subsets.add(new ArrayList<>(cur));
2222
for(int i=index;i<nums.length;i++){
23-
current.add(nums[i]);
24-
generateSubsets(i+1,nums,current,subsets);
25-
current.remove(current.size()-1);
23+
cur.add(nums[i]);
24+
generateSubsets(i+1,nums,cur,subsets);
25+
cur.remove(cur.size()-1);
2626
}
2727
}
28-
}
28+
}

Java/soln-recursion-problems/generate-parentheses.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,24 @@
1111

1212
class Solution {
1313
List<String> result=new ArrayList<>();
14+
1415
public List<String> generateParenthesis(int n) {
15-
if(n==0){
16+
if(n==0)
1617
return result;
17-
}
1818
solve(n,n,"");
1919
return result;
2020
}
2121

22-
public void solve(int open, int close, String str){
23-
if(open==0 && close==0){
22+
public void solve(int open_br, int close_br, String str){
23+
if(open_br==0 && close_br==0){
2424
result.add(str);
2525
return;
2626
}
27-
if(open!=0){
28-
solve(open-1,close,str+"(");
29-
}
30-
if(close>open){
31-
solve(open,close-1,str+")");
27+
if(open_br!=0)
28+
solve(open_br-1,close_br,str+"(");
29+
30+
if(close_br>open_br){
31+
solve(open_br,close_br-1,str+")");
3232
}
3333
}
3434
}

Java/soln-string-problems/longest-common-prefix.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ class Solution {
1313
public String longestCommonPrefix(String[] strs) {
1414
if(strs==null || strs.length==0)
1515
return "";
16+
if(strs.length==1)
17+
return strs[0];
1618

1719
String first=strs[0];
1820
String prefix="";
@@ -26,4 +28,4 @@ public String longestCommonPrefix(String[] strs) {
2628
}
2729
return prefix;
2830
}
29-
}
31+
}

Java/soln-string-problems/valid-palindrome.java

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -11,34 +11,24 @@
1111

1212
class Solution {
1313
public boolean isPalindrome(String s) {
14-
s=s.toLowerCase().trim().replaceAll(" ","");
1514
int len=s.length();
16-
int start=0;
17-
int end=len-1; char left,right;
18-
while(start<end)
19-
{
20-
left=s.charAt(start);
21-
right=s.charAt(end);
22-
if(left==right)
23-
{
24-
start++;
25-
end--;
26-
}
15+
int left=0;
16+
int right=len-1;
17+
s=s.toLowerCase();
18+
19+
while(left<right){
20+
if(!Character.isLetterOrDigit(s.charAt(left)))
21+
left++;
22+
else if(!Character.isLetterOrDigit(s.charAt(right)))
23+
right--;
24+
else if(s.charAt(left)!=s.charAt(right))
25+
return false;
2726
else
2827
{
29-
if((left<'a' || left>'z') && (left<'0' || left>'9'))
30-
{
31-
start++;
32-
}
33-
else if((right<'a' || right>'z') && (right<'0' || right>'9'))
34-
{
35-
end--;
36-
}
37-
else
38-
return false;
39-
}
40-
41-
}
42-
return true;
28+
left++;
29+
right--;
30+
}
31+
}
32+
return true;
4333
}
44-
}
34+
}

0 commit comments

Comments
 (0)