In this post, we will see algorithm problems with their solutions which are asked during Java interviews.

*How to check if a number is Palindrome?*

void checkPalindrome(int n){ int temp, sum = 0; int input=n; while(n>0) { temp = n%10; sum = (sum*10) + temp; n = n/10; } if(input == sum){ System.out.println("Palindrome"); } else { System.out.println("Not Palindrome"); } }

*How to check if a number is Prime in Java8?*

void checkPrime(int n) { if(n > 1 && IntStream.range(2, n).noneMatch(i -> i%n==0)) { System.out.println("Prime"); } else { System.out.println("Non-Prime"); } }

*How to sort objects in reverse order in Java8?*

Student student1 = new Student(372,"Venkat",1); Student student2 = new Student(2,"Sachin",4); Student student3 = new Student(2345,"Ganguly",6); Student student4 = new Student(72,"Karthik",2); List studlist = new CopyOnWriteArrayList(); studlist.add(student1); studlist.add(student2); studlist.add(student3); studlist.add(student4); // Iterate in Java8 studlist.forEach(s -> System.out.println(s.name)); // Sort by Ids studlist.sort((Student s1,Student s2) -> s1.getId() - s2.getId()); // Sort by Rank in reverse Order studlist.sort((Student s1,Student s2) -> s2.getRank() - s1.getRank());

*Find second highest number in an Array?*

int arr[] = {45,89, 29,1, 9, 100}; int highest = 0, secondHighest = 0; for(int i=0; i<arr.length;i++) { if(arr[i] > highest) { highest = arr[i]; } else if(arr[i] > secondHighest) { secondHighest = arr[i]; } }

*Find Nth highest Salary from a SQL Table?*

SELECT MIN(SALARY) FROM EMPLOYEE WHERE SALARY IN (SELECT DISTINCT TOP N FROM EMPLOYEE ORDER BY SALARY desc);

*Print Only Numerics from a String?*

String sampleStr = "fdsha3430d3kdjafl0737434833"; String numericsOnlyStr = sampleStr.replaceAll("[^0-9]", "");

*Print Duplicates in an Array?*

for(int i=0;i<arr.length;i++) { for(int j=i+1; j< arr.length; j++) { if(arr[i] == arr[j]) { System.out.println(arr[j]); } } }

*Fetch Frequency of Elements repeated in an Array?*

Map<Integer, Integer> mp = new HashMap<>(); // Iterating through array elements for (int i = 0; i < n; i++) { if (mp.containsKey(arr[i])) { mp.put(arr[i], mp.get(arr[i]) + 1); } else { mp.put(arr[i], 1); } } // Iterating through Map and Printing frequencies for (Map.Entry<Integer, Integer> entry : mp.entrySet()) { System.out.println(entry.getKey() + " " + entry.getValue()); }

*Find Triplets in an array whose sum is equal to n?*

public class Triplets { public static List<List> findTriplets(int[] numbers, int sum) { List<List> tripletsCombo = new ArrayList<List>(); HashSet set = new HashSet(); List triplets = new ArrayList(); if (numbers.length == 0 || sum <= 0) { return tripletsCombo; } Arrays.sort(numbers); for (int i = 0; i < numbers.length - 2; i++) { int j = i + 1; int k = numbers.length - 1; while (j < k) { if (numbers[i] + numbers[j] + numbers[k] == sum) { String str = numbers[i] + "," + numbers[j] + "," + numbers[k]; // Check for the unique Triplet if (!set.contains(str)) { triplets.add(numbers[i]); triplets.add(numbers[j]); triplets.add(numbers[k]); tripletsCombo.add(triplets); triplets = new ArrayList(); set.add(str); } j++; k--; } else if (numbers[i] + numbers[j] + numbers[k] < sum) { j++; } else { // numbers[i] + numbers[j] + numbers[k] > sum k--; } } } return tripletsCombo; } public static void main(String[] args) { int[] numbers = { 2, 3, 1, 5, 4 }; int sum = 9; List<List> triplets = findTriplets(numbers, sum); if (triplets.isEmpty()) { System.out.println("No triplets are found"); } else { System.out.println(triplets); } } }

*How to check if two strings are Anagrams?*

Two strings are called Anagrams if they contain same set of characters but in different order. Examples: **“Astronomer – Moon starer”, “A gentleman – Elegant man”, “Dormitory – Dirty Room”, “keep – peek”.**

void isAnagram(String input1, String input2) { //Removing all white spaces from s1 and s2 String s1_nonSpaces = input1.replaceAll("\\s", ""); String s2_nonSpaces = input2.replaceAll("\\s", ""); boolean status = true; if(s1_nonSpaces.length() != s2_nonSpaces.length()) { status = false; } else { char[] s1Array = s1_nonSpaces.toLowerCase().toCharArray(); char[] s2Array = s2_nonSpaces.toLowerCase().toCharArray(); Arrays.sort(s1Array); Arrays.sort(s2Array); status = Arrays.equals(s1Array, s2Array); } System.out.print(status?"Anagrams":"Non-Anagrams"); }

*Swap numbers without using temp/third variable?*

void swapWithoutTemp(int a, int b) { a = a+b; b = a-b; a = a-b; }

*Find number of combinations for Sum of Two Elements from two arrays is equal to N?*

We have two arrays of numbers, suppose we take one element from first array and another element from second array. Their sum should be equal to N(given number).

sumOfTwoElementsInTwoArrays() { int arr1[] = {4,8,10,12,7}; int arr2[] = {6,90,34,45}; int sumValue = 44; HashSet complements = new HashSet(); int pairCount = 0; for(int i=0;i<arr1.length;i++) { complements.add(arr1[i] - sumValue); } for(int j=0;j<arr1.length;j++) { if(complements.contains(arr2[j])) { pairCount++; } } System.out.print("Number of pairs is "+pairCount); }

*First non repeated character in a String?*

String str = "BANANA"; char firsNonRepeatedCharacter; HashMap<Character, Integer> hmp = new HashMap<Character, Integer>(); for(int z=0;z<s.length();z++) { if(hmp.containsKey(str.charAt(z))) { hmp.put(str.charAt(z), hmp.get(str.charAt(z))+1); } else { hmp.put(str.charAt(z), 1); } } Set characterSet = hmp.keySet(); for(Character c:characterSet){ if(hmp.get(c).toString()equals("1")) { firsNonRepeatedCharacter = c; break; } }

*Find the number of occurrence of an element in an array using Java8?*

int b[] = {1,2,34,1}; List bList = Arrays.stream(b).boxed().collect(Collectors.toList()); System.out.println(bList.stream().filter(z -> z.toString().equalsIgnoreCase("1")).count());

*100 doors toggle open/close*

There are 100 doors in a row, all doors are initially closed. A person walks through all doors multiple times and toggle (if open then close, if close then open) them in following way:

In first walk, the person toggles every door, __In second walk, the person toggles every second door, i.e., 2nd, 4th, 6th, 8th, …, ____In third walk, the person toggles every third door, i.e. 3rd, 6th, 9th, …__

Find in nth walk, what will be the status of all doors

doorsOpenClosed(int no_of_walks) { int door_id, walk_id; int doors[] = new int[101]; for(int i=0;i<100;i++) { doors[i] = 0; } for (walk_id = 1; walk_id <= no_of_walks; walk_id++) { for (door_id = walk_id; door_id <= 100; door_id += walk_id) { if(door_id%walk_id == 0) { doors[door_id]=(doors[door_id] == 0)?1:0; } } } for (int j = 0; j <= 100; j++) { if(doors[j] == 1) { System.out.println("Open Door number::::"+j); } } }