INTERVIEW BIT SOLUTION

 1) Rotate Matrix

Interview Bit Solution using ArrayList

public class Solution {
public void rotate(ArrayList<ArrayList<Integer>> a) {
int n = a.get(0).size();
for(int i=0;i<n/2;i++)
{
for(int j=i;j<n-i-1;j++)
{
int temp = a.get(i).get(j);
int pp = a.get(n-j-1).get(i);
a.get(i).set(j, pp);
int oo = a.get(n-i-1).get(n-j-1);
a.get(n-j-1).set(i, oo);

int ll = a.get(j).get(n-i-1);

a.get(n-i-1).set(n-j-1,ll);


a.get(j).set(n-i-1,temp);
}
}
}
}
Using array


import java.util.Arrays;
public class Rotate2DArrayInPlace {

public static void main (String args [] ) throws Exception {

Integer [] [] myNxNArray = new Integer [][] {
{1, 2, 3},
{4,5,6},
{7,8,9}
};

System.out.println("SOURCE ARRAY: \n" + Arrays.deepToString(myNxNArray));
Integer [][] rotatedInPlace = rotateMatrixInPlaceCounterClockwise(myNxNArray);

System.out.println("ROTATED IN PLACE - 90 degrees COUNTER CLOCKWISE");
System.out.println(Arrays.deepToString(rotatedInPlace));

//The array referenced in above definition myNxNArray is changed so you will need to redefine
Integer [] [] myNxNArray1 = new Integer [][] {
{1, 2, 3},
{4,5,6},
{7,8,9}
};

Integer [][] rotatedInPlaceClockwise = rotateMatrixInPlaceClockwise(myNxNArray1);

System.out.println("ROTATED IN PLACE - 90 degrees CLOCKWISE");
System.out.println(Arrays.deepToString(rotatedInPlaceClockwise));

}

/**
* This method rotates the matrix 90 degrees counter clockwise without using extra buffer..
*/
public static Integer[][] rotateMatrixInPlaceCounterClockwise(Integer[][] matrix) throws Exception {
System.out.println("******************rotate**Matrix**InPlace**counter Clockwise**rotation****************");
if(matrix.length == 0 || matrix.length != matrix[0].length) {
throw new Exception ("Invalid Input");
}

int n = matrix[0].length;
int tmp;
for (int i = 0; i < n / 2; i++) {
for (int j = i; j < n - i - 1; j++) {

tmp = matrix[i][j];
System.out.println("tmp:"+tmp);
matrix[i][j] = matrix[j][n - i - 1];
System.out.println("matrix[j][n - i - 1]:"+matrix[j][n - i - 1]+" j: "+j+" i: "+i);
matrix[j][n - i - 1] = matrix[n - i - 1][n - j - 1];
System.out.println("matrix[n - i - 1][n - j - 1]:"+matrix[n - i - 1][n - j - 1]+" j: "+j+" i: "+i);
matrix[n - i - 1][n - j - 1] = matrix[n - j - 1][i];
System.out.println("matrix[n - j - 1][i]:"+matrix[n - j - 1][i]+" j: "+j+" i: "+i);
matrix[n - j - 1][i] = tmp;

}

}
return matrix;
}

/**
* This method rotates the matrix 90 degrees counter clockwise without using extra buffer..
*/
public static Integer[][] rotateMatrixInPlaceClockwise(Integer[][] matrix) throws Exception {
System.out.println("******************rotate**Matrix**InPlace**Clockwise**rotation****************");
if(matrix.length == 0 || matrix.length != matrix[0].length) {
throw new Exception ("Invalid Input");
}

int n = matrix.length;
System.out.println("n:"+n);
int top;
for (int i = 0; i < n / 2; i++) {

for (int j = i; j < n - i - 1; j++) {

top = matrix[i][j];
System.out.println("top:"+top);
System.out.println("top:"+top);
matrix[i][j] = matrix[n - j - 1][i];
System.out.println("matrix[n - j - 1][i]:"+matrix[n - j - 1][i]+" j: "+j+" i: "+i);
matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1];
System.out.println("matrix[n - i - 1][n - j - 1]:"+matrix[n - i - 1][n - j - 1]+" j: "+ j+" i: "+i);
System.out.println("matrix[n - i - 1][n - j - 1]:"+matrix[n - i - 1][n - j - 1]+" j: "+ j+" i: "+i);

matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1];
System.out.println("matrix[j][n - i - 1]:"+matrix[j][n - i - 1]+" j: "+j+" i: "+i);

matrix[j] [n - i - 1] = top;
System.out.println("matrix[j][n-i-1]:"+matrix[j][n-i-1]+" j: "+j+" i: "+i);


}

}
return matrix;
}

}

 OUTPUT:

SOURCE ARRAY: 
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
******************rotate**Matrix**InPlace**counter Clockwise**rotation****************
tmp:1
matrix[j][n - i - 1]:3 j: 0 i: 0
matrix[n - i - 1][n - j - 1]:9 j: 0 i: 0
matrix[n - j - 1][i]:7 j: 0 i: 0
tmp:2
matrix[j][n - i - 1]:6 j: 1 i: 0
matrix[n - i - 1][n - j - 1]:8 j: 1 i: 0
matrix[n - j - 1][i]:4 j: 1 i: 0
ROTATED IN PLACE - 90 degrees COUNTER CLOCKWISE
[[3, 6, 9], [2, 5, 8], [1, 4, 7]]
******************rotate**Matrix**InPlace**Clockwise**rotation****************
n:3
top:1
top:1
matrix[n - j - 1][i]:7 j: 0 i: 0
matrix[n - i - 1][n - j - 1]:9 j: 0 i: 0
matrix[n - i - 1][n - j - 1]:9 j: 0 i: 0
matrix[j][n - i - 1]:3 j: 0 i: 0
matrix[j][n-i-1]:1 j: 0 i: 0
top:2
top:2
matrix[n - j - 1][i]:4 j: 1 i: 0
matrix[n - i - 1][n - j - 1]:8 j: 1 i: 0
matrix[n - i - 1][n - j - 1]:8 j: 1 i: 0
matrix[j][n - i - 1]:6 j: 1 i: 0
matrix[j][n-i-1]:2 j: 1 i: 0
ROTATED IN PLACE - 90 degrees CLOCKWISE
[[7, 4, 1], [8, 5, 2], [9, 6, 3]]

Spiral Matrix Using ArrayList

public class Solution {
// DO NOT MODIFY THE LIST. IT IS READ ONLY
public ArrayList<Integer> spiralOrder(final List<ArrayList<Integer>> A) {
ArrayList<Integer> pp = new ArrayList<Integer>();

int n = A.get(0).size();
int m = A.size();
int l =0;
int r = n-1;
int t=0, b =m-1;
int dir =0;
while(l<=r && t<=b)
{
if(dir==0)
{
for(int k=l;k<=r;k++)
{
int temp = A.get(t).get(k);
pp.add(temp);
}
t++;
}
else if(dir==1)
{
for(int k=t;k<=b;k++)
{
int temp = A.get(k).get(r);
pp.add(temp);
}

r--;
}
else if(dir==2){
for(int k=r;k>=l;k--)
{
int temp = A.get(b).get(k);
pp.add(temp);

}
b--;
}

else if(dir==3){
for(int k=b;k>=t;k--)
{
int temp = A.get(k).get(l);
pp.add(temp);

}
l++;

}
dir = (dir+1)%4;

}

return pp;

}
}

Check duplicates in o(n) using hashset
public class Solution {
    // DO NOT MODIFY THE LIST
    public int repeatedNumber(final List<Integer> a) {
        Set<Integer> set = new HashSet<Integer>();
        for(int num : a){
            if(set.contains(num)){
                return num;
            } else {
                set.add(num);
            }
        }
        return a.size()+1;
    }
}


MISSING AND REPEATING NUMBER
public class Solution {
// DO NOT MODIFY THE LIST. IT IS READ ONLY
public ArrayList<Integer> repeatedNumber(final List<Integer> A) {
int a[] = new int[A.size()+1];
ArrayList<Integer> k = new ArrayList<>();
for(int i=0;i<A.size();i++)
{
a[A.get(i)]++;
}

for(int j=0;j<a.length;j++)
{
if(a[j]==2)
{
k.add(j);
}
}

for(int i=1;i<a.length;i++)
{
if(a[i]==0)
{
k.add(i);
}


}

return k;

}
}


Largest Number InterViewBit

public class Solution {
public String largestNumber(final List<Integer> A) {

ArrayList<String> mm = new ArrayList<>();
for(int i=0;i<A.size();i++)
{
mm.add(String.valueOf(A.get(i)));

}
Collections.sort(mm, new Comparator<String>() {
@Override

public int compare(String o1, String o2) {
String s1 = o1 + o2;
String s2 = o2 + o1;
return s2.compareTo(s1);

}
});
int[] p=new int[A.size()];
for(int i=0;i<A.size();i++)
{
p[i]=A.get(i);
}
int flag=0;

for(int a:p)
{
if(a!=0)
{
flag=1;

}

}

if(flag==0)
{
return "0";
}
/*
for(int i=0;i<A.size()-1;i++)
{
for(int j=i+1;j<A.size();j++)
{
String first = String.valueOf(p[i]);
String second = String.valueOf(p[j]);

if((first+second).compareTo(second+first)<0)
{
int temp = p[i];
p[i] = p[j];
p[j] = temp;
}



}

}
*/
String result = String.join("", mm);

//String strOfInts = Arrays.toString(p).replaceAll("\\[|\\]|,|\\s", "");

return result;
}
}

Largest Contigous Subarray

class Solution {
public int findMaxLength(int[] nums) {

HashMap<Integer,Integer> aa = new HashMap<>();
aa.put(0,-1);//<SUM,INDEX>  //put sum<0,-1>
int count=0;
int maxlen=0;
for(int i=0;i<nums.length;i++)
{
if(nums[i]==0)
{
count-=1;
}
else{

count+=1;
}

if(aa.containsKey(count))
{ //<<current index>-<<stored index in hashmap>>
maxlen=Math.max(maxlen,i-aa.get(count));
}

else{
aa.put(count,i);
}
}

return maxlen;
}
}




Rotate String
class Solution {

public static String leftrotate(String str, int d)
{
String ans = str.substring(d) + str.substring(0, d);
return ans;
}
public static String rightrotate(String str, int d)
{
return leftrotate(str, str.length() - d);
}
public String stringShift(String s, int[][] shift) {

String pp =s;
for(int i=0;i<shift.length;i++)
{
for(int j=0;j<1;j++)
{
if(shift[i][0]==0)
{int d = shift[i][1];
pp= leftrotate(pp,d);
System.out.println("left vala "+pp);
}
else
{int d = shift[i][1];
pp= rightrotate(pp,d);
System.out.println("right vala "+pp);
}
}
}
return pp;
}
}
class Solution {

public static String leftrotate(String str, int d)
{
String ans = str.substring(d) + str.substring(0, d);
return ans;
}
public static String rightrotate(String str, int d)
{
return leftrotate(str, str.length() - d);
}
public String stringShift(String s, int[][] shift) {

String pp =s;


for(int i=0;i<shift.length;i++)
{

for(int j=0;j<1;j++)
{
if(shift[i][0]==0)
{int d = shift[i][1];
pp= leftrotate(pp,d);
System.out.println("left vala "+pp);
}
else
{int d = shift[i][1];
pp= rightrotate(pp,d);
System.out.println("right vala "+pp);
}
}
}


return pp;
}
}

Comments

Popular posts from this blog

Interview Preparation Kit

Dinosaurus_Island_Character_level_language_model

How to crack the interviews and get a decent job?