DEV Community

Arpit Rathore
Arpit Rathore

Posted on • Edited on

Java Cheat sheet for leetcode

Data Structures Basics

1. Arrays

int[] arr = new int[10]; arr[1] = 34; arr[1] = 35; int i = arr[1]; int size = arr.length; // Fill array with a value Arrays.fill(arr, -1); // Sort Arrays.sort(arr); // Ascending Arrays.sort(arr, (a, b) -> b - a); // Descending 
Enter fullscreen mode Exit fullscreen mode

2. Character

char c1 = 'a'; char[] arr = "test".toCharArray(); char c2 = str.charAt(2); // Character Character.toLowerCase(c) Character.isLowerCase(c); Character.toUpperCase(c) Character.isUpperCase(c); Character.isLetter(c) Character.isDigit(c) Character.isAlphabetic(c); Character.isLetterOrDigit(c) 
Enter fullscreen mode Exit fullscreen mode

3. String and StringBuilder

// String String str = new String(); str = "abc"; int size = str.length(); char[] arr = str.toCharArray(); String sub = str.substring(1, 3); //[a, b) str.toLowerCase(); str.toUpperCase(); str.replaceAll("a", "z"); // String Builder StringBuilder sb = new StringBuilder(); sb.append("hellohowareyou?"); sb.insert(2, "z"); sb.delete(1, 3) // [from, to) sb.deleteCharAt(0); sb.reverse(); sb.substring(1); sb.substring(3, 5); // [from, to) 
Enter fullscreen mode Exit fullscreen mode

4. List and ArrayList

List<Integer> list = new ArrayList<>(); list.add(5); list.addAll(List.of(6, 7, 8, 9, 10)); // Index based list.remove(3); list.set(0, 9); list.get(0); int size = list.size(); list.clear(); list.isEmpty(); // Inefficient - O(n) list.contains(77); list.indexOf(10); Integer[] arr = list.toArray(new Integer[0]); int[] arrPrimitive = list.stream().mapToInt(Integer::intValue).toArray(); // Sort O(nlog(n)) Collections.sort(list); Collections.sort(list, (a, b) -> b - a); Collections.sort(personList, (p1, p2) -> p2.age - p1.age); 
Enter fullscreen mode Exit fullscreen mode

5. Set

Stack<Integer> st = new Stack<>(); st.push(1); st.pop(); st.peek(); 
Enter fullscreen mode Exit fullscreen mode

6. Queue and Deque

// -----------------Queue----------------- Queue<Integer> q = new LinkedList<>(); q.add(1); q.remove(); q.peek(); // Without exception q.offer(2); q.poll() // -----------------Deque----------------- Deque<Integer> dq = new LinkedList<>(); dq.addFirst(1); dq.addLast(2); int f1 = dq.getFirst(); int l1 = dq.getLast(); int f2 = dq.removeFirst(); int l2 = dq.removeLast(); 
Enter fullscreen mode Exit fullscreen mode

7. PriorityQueue

// Basics PriorityQueue<Integer> pq = new PriorityQueue<>(); PriorityQueue<Integer> maxPQ = new PriorityQueue<>(Comparator.reverseOrder()); // Add/Offer pq.add(5); // Remove/Poll Integer item = pq.remove(); // Return without removing Integer item = pq.peek(); // -----------------Inefficient----------------- // Contains boolean exists = pq.contains(5); // Remove specific object pq.remove(5); //--------------Custom comparators-------------------- // Max heap PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Comparator.reverseOrder()); // Based on string length PriorityQueue<String> strPQByLength = new PriorityQueue<>((s1, s2) -> s2.length() - s1.length()); // Lexicographical Order PriorityQueue<String> strPQLexi = new PriorityQueue<>(); // Reverse Lexicographical Order PriorityQueue<String> strPQLexiDesc = new PriorityQueue<>(Comparator.reverseOrder()); // ----------------Custom Objects------------------ class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } } // Based on age in descending order PriorityQueue<Person> personPQ = new PriorityQueue<>((p1, p2) -> p2.age - p1.age); 
Enter fullscreen mode Exit fullscreen mode

Visualization helper methods

I have created few helper methods to visualize a data structure during an algorithm.

1. Two pointers

  • int[] : Integer Array
private void tpi(int[] s, int l, int r, String... prefix) { if (prefix.length == 0) { prefix = new String[] { "" }; } System.out.print(prefix[0]); for (int i = 0; i < s.length; i++) { if (i == l && i == r) { System.out.printf("[(%s)]", s[i]); } else if (i == l) { System.out.printf("(%s)", s[i]); } else if (i == r) { System.out.printf("[%s]", s[i]); } else { System.out.print(s[i]); } System.out.print(" "); } System.out.printf("| l=%s, r=%s %n", l, r); } 
Enter fullscreen mode Exit fullscreen mode
  • char[] : Character Array
// Two pointer char array private void tpc(char[] s, int l, int r, String... prefix) { if (prefix.length == 0) { prefix = new String[] { "" }; } System.out.print(prefix[0]); for (int i = 0; i < s.length; i++) { if (i == l && i == r) { System.out.printf("[(%s)]", s[i]); } else if (i == l) { System.out.printf("(%s)", s[i]); } else if (i == r) { System.out.printf("[%s]", s[i]); } else { System.out.print(s[i]); } System.out.print(" "); } System.out.printf("| l=%s, r=%s %n", l, r); } 
Enter fullscreen mode Exit fullscreen mode
  • String : String
// Two pointer string private void tps(String s, int l, int r, String... prefix) { if (prefix.length == 0) { prefix = new String[] { "" }; } System.out.print(prefix[0]); for (int i = 0; i < s.length(); i++) { if (i == l && i == r) { System.out.printf("[(%s)]", s.charAt(i)); } else if (i == l) { System.out.printf("(%s)", s.charAt(i)); } else if (i == r) { System.out.printf("[%s]", s.charAt(i)); } else { System.out.print(s.charAt(i)); } System.out.print(" "); } System.out.printf("| l=%s, r=%s %n", l, r); } 
Enter fullscreen mode Exit fullscreen mode

2. Sliding Window

  • int[] : Integer Array
// Sliding window int array private void swi(int[] nums, int l, int r, String... prefix) { if (prefix.length == 0) { prefix = new String[] { "" }; } System.out.print(prefix[0]); for (int i = 0; i < nums.length; i++) { if (i == l) { System.out.print("["); } System.out.print(nums[i]); if (i == r) { System.out.print("]"); } System.out.print(" "); } System.out.printf("| l=%s, r=%s %n", l, r); } 
Enter fullscreen mode Exit fullscreen mode
  • char[] : Character Array
// Sliding window char array private void swi(char[] chars, int l, int r, String... prefix) { if (prefix.length == 0) { prefix = new String[] { "" }; } System.out.print(prefix[0]); for (int i = 0; i < chars.length; i++) { if (i == l) { System.out.print("["); } System.out.print(chars[i]); if (i == r) { System.out.print("]"); } System.out.print(" "); } System.out.printf("| l=%s, r=%s %n", l, r); } 
Enter fullscreen mode Exit fullscreen mode
  • String : String
// Sliding window string private void sws(String s, int l, int r, String... prefix) { if (prefix.length == 0) { prefix = new String[] { "" }; } System.out.print(prefix[0]); for (int i = 0; i < s.length(); i++) { if (i == l) { System.out.print("["); } System.out.print(s.charAt(i)); if (i == r) { System.out.print("]"); } System.out.print(" "); } System.out.printf("| l=%s, r=%s %n", l, r); } 
Enter fullscreen mode Exit fullscreen mode

3. Binary Search

// Print binary search private void pbs(int[] a, int m, int l, int r, String... prefix) { if (prefix.length == 0) { prefix = new String[] { "" }; } System.out.print(prefix[0]); System.out.printf("L: %s, M: %s, R: %s | ", l, m, r); for (int i = 0; i < a.length; i++) { if (i == m) { if (m == l && m == r) { System.out.printf("[({%s})]", a[i]); } else if (m == l) { System.out.printf("({%s})", a[i]); } else if (m == r) { System.out.printf("[{%s}]", a[i]); } else { System.out.printf("{%s}", a[i]); } } else if (i == l && i == r) { System.out.printf("[(%s)]", a[i]); } else if (i == l) { System.out.printf("(%s)", a[i]); } else if (i == r) { System.out.printf("[%s]", a[i]); } else { System.out.print(a[i]); } System.out.print(" "); } System.out.println(); } 
Enter fullscreen mode Exit fullscreen mode

4. Two dimension Array

  • int[][] : Integer Array
// Two dimension integer private void tdi(int[][] a) { for (int[] row : a) { System.out.println(Arrays.toString(row)); } System.out.println("---"); } 
Enter fullscreen mode Exit fullscreen mode
  • char[][] : Character Array
// Two dimension char private void tdc(char[][] a) { for (char[] row : a) { System.out.println(Arrays.toString(row)); } System.out.println("---"); } 
Enter fullscreen mode Exit fullscreen mode
  • String[][] : String
// Two dimension String private void tds(String[][] a) { for (String[] row : a) { System.out.println(Arrays.toString(row)); } System.out.println("---"); } 
Enter fullscreen mode Exit fullscreen mode

5. Print Linked list

// Print linked list private void pll(ListNode head, String... prefix) { if (prefix.length == 0) { prefix = new String[] { "" }; } System.out.print(prefix[0]); int size = 0; ListNode curr = head; while (curr != null) { size++; curr = curr.next; } curr = head; int i = 0; while (curr != null) { if (i == size / 2) { System.out.printf("[%s] -> ", curr.val); } else { System.out.printf("%s -> ", curr.val); } curr = curr.next; i++; } System.out.print("null\n"); } 
Enter fullscreen mode Exit fullscreen mode

6. Print Binary Tree

// Print binary tree private void pbt(final TreeNode node) { String result = ppt(node, new StringBuilder(), true, new StringBuilder()); System.out.println(result); } private String pbtUtil(TreeNode node, StringBuilder prefix, boolean isTail, StringBuilder sb) { if (node.right != null) { pbtUtil(node.right, new StringBuilder().append(prefix).append(isTail ? "│ " : " "), false, sb); } sb.append(prefix).append(isTail ? "└── " : "┌── ").append(node.val).append("\n"); if (node.left != null) { pbtUtil(node.left, new StringBuilder().append(prefix).append(isTail ? " " : "│ "), true, sb); } return sb.toString(); } 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)