Cracking the Coding Interview

Ace your homework & exams now with Quizwiz!

Implement an algorithm to determine if a string has all unique characters. What if you cannot use additional data structures?

1.1

Given two strings, write a method to decide if one is a permutation of the other.

1.2

Write a method to replace all spaces in a string with '%20'. You may assume that the string has sufficient space at the end to hold the additional characters, and that you are given the "true" length of the string. (If implementing in Java, please use a character array so you can perform this operation in place). ex Input: "Mr John Smith ", 13 . Output: "Mr%20John%20Smith"

1.3

Given a string, write a function to check if it is a permutation of a palindrome. A palindrome is a word or phrase that is the same forwards and backwards. A permutation is a rearrangement of letters. The palindrome does not need to be limited to just dictionary words. ex Input: Tact Coa . Output: True (permutations: "taco cat", "atco cta", etc.)

1.4

There are 3 types of edits that can be performed on strings: insert a character, remove a character, or replace a character. Given 2 strings, write a function to check if they are one edit (or zero edits) away. pale, ple -> true. pales, pale -> true. pale, bale -> true. pale, bake -> false.

1.5

Given an image represented by an NxN matrix, where each pixel in the image is 4 bytes, write a method to rotate the image by 90 degrees. Can you do this in place?

1.7

Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column are set to 0

1.8

Assume you have a method isSubstring which checks if one word is a substring of another. Given two strings, s1 and s2, write code to check if s2 is a rotation of s1 using only one call to isSubstring

1.9

Write code to remove duplicates from an unsorted linked list.

2.1 FOLLOW UP: How would you solve this problem if a temporary buffer is not allowed?

Implement an algorithm to find the kth to last element of a singly linked list

2.2

Implement an algorithm to delete a node in the middle (i.e. any node but the first and last node, not necessarily the exact middle) of a singly linked list, given only access to that node. Ex: Input: the node c from the linked list a -> b -> c -> d -> e -> f Result: nothing is returned, but the new linked list looks like a -> b -> d -> e -> f

2.3

Write code to partition a linked list around a value x, such that all nodes less than x come before all nodes greater than or equal to x. If x is contained within the list, the values of x only need to be after the elements less than x (see below). The partition element x can appear anywhere in the "right partition"; it does not need to appear between the left and right partitions. Example Input: 3 -> 5 -> 8 -> 5 -> 10 -> 2 -> 1 [partition = 5] Output: 3 -> 1 -> 2 -> 10 -> 5 -> 5 -> 8

2.4

You have two numbers represented by a linked list, where each node contains a single digit. The digits are stored in reverse order, such that the 1s digit is at the head of the list. Write a function that adds the two numbers and returns the sum as a linked list. Example Input: (7 -> 1 -> 6) + (5 -> 9 -> 2). That is, 617 + 295 Output: 2 -> 1 -> 9. That is, 912

2.5 FOLLOW UP: Suppose the digits are stored in forward order. Repeat the above problem. Example: Input: (6 -> 1 -> 7) + (2 -> 9 -> 5). That is, 617 + 295. Output: 9 -> 1 -> 2. That is, 912

Implement a function to check if a linked list is a plindrome

2.6

Given two (singly) linked lists, determine if the two lists intersect. Return the intersecting node. Note that the intersection is defined based on reference, not value. That is, if the kth node of the first linked list is the exact same node (by reference) as the jth node of the second linked list, then they are intersecting.

2.7

Given a circular linked list, implement an algorithm that returns the node at the beginning of the loop. DEFINITION: Circular linked list: a (corrupt) linked list in which a node's next pointer points to an earlier node, so as to make a loop in the linked list. Example: Input: A -> B -> C -> D -> E -> C [the same C as earlier] Output: C

2.8

Describe how you could use a single array to implement three stacks.

3.1

How would you design a stack which, in addition to push and pop, has a function min which returns the minimum element? Push, pop, and min should all operate in O(1) time.

3.2

Imagine a (literal) stack of plates. If the stack gets too high, it migght topple. Therefore, in real life, we would likely start a new stack when the previous stack exceeds some threshold. Implement a data structure SetOfStacks that mimics this. SetOfStacks should be composed of several stacks and should create a new stack once the previous one exceeds capacity. SetOfStacks.push() and SetOfStacks.pop() should behave identically to a single stack (that is, pop() should return the same values as it would if there were just a single stack).

3.3 FOLLOW UP: Implement a function popAt(int index) which performs a pop operation on a specific sub-stack

Implement MyQueue class which implements a queue using two stacks

3.4

Write a program to sort a stack such that the smallest items are on the top. You can use an additional temporary stack, but you may not copy the elements into any other data structure (such as an array). The stack supports the following operations: push, pop, peek, and isEmpty.

3.5

An animal shelter, which holds only dogs and cats, operates on a strictly "first in, first out" basis. People must adopt either the "oldest" (based on arrival time) of all animals at the shelter, or they can select whether they would prefer a dog or a cat (and will receive the oldest animal of that type). They cannot select which specific animal they would like. Create the data structures to maintain this system and implement operations such as enqueue, dequeueAny, dequeueDog, and dequeueCat. You may use the built-in LinkedList data structure.

3.6

Given a directed graph, design an algorithm to find out whether there is a route between two nodes.

4.1

T1 and T2 are two very large binary trees, with T1 much bigger than T2. Create an algorithm to determine if T2 is a subtree of T1. A tree T2 is a subtree of T1 if there exists a node n in T1 such that the subtree of n is identical to T2. That is, if you cut off the tree at node n, the two trees would be identical.

4.10

You are implementing a binary tree class from scratch which, in addition to insert, find, and delete, has a method getRandomNode() which returns a random node from the tree. All nodes should be equally likely to be chose. Design and implement an algorithm for getRandomNode, and explain how you would implement the rest of the methods.

4.11

You are given a binary tree in which each node contains an integer value (which might be positive or negative). Design an algorithm to count the number of paths that sum to a given value. The path does not need to start or end at the root or a leaf, but it must go downwards.

4.12

Given a sorted (increasing order) array with unique integer elements write an algorithm to create a binary search tree with minimal height.

4.2

Given a binary tree, design an algorithm which creates a linked list of all the nodes at each depth (e.g. if you have a tree with depth D, you'll have D linked lists)

4.3

Implement a function to check if a binary tree is balanced. For the purposes of this question, a balanced tree is defined to be a tree such that the heights of the two subtrees of any node never differ by more than one.

4.4

Implement a function to check if a binary tree is a binary search tree

4.5

Write an algorithm to find the "next" node (i.e., in-order successor) of a given node in a binary search tree. You may assume that each node has a link to its parent.

4.6

You are given a list of projects and a list of dependencies (which is a list of pairs of projects, where the second project is dependent on the first project). All of a project's dependencies must be built before the project is. Find a build order that will allow the projects to be built. If there is no valid build order, return an error. Example: Input: projects: a, b, c, d, e, f dependencies: (a,d), (f,b), (b,d), (f,a), (d,c) Output: f, e, a, b, d, c

4.7

Design an algorithm and write code to find the first common ancestor of two nodes in a binary tree. Avoid storing additional nodes in a data structure. NOTE: this is not necessarily a binary search tree.

4.8

A binary search tree was created by traversing through an array from left to right and inserting each element. Given a binary search tree with distinct elements, print all possible arrays that could have led to this tree. Example Input: root 2, left child 1, right child 3 Output: {2,1,3}, {2,3,1}

4.9


Related study sets

Potoshop Brain Buffet Lessons Review

View Set

Chapter 6 A&P (includes hw and review)

View Set

lesson 10 respiratory system physiology

View Set

CH 8 Florida Laws & Rules Pertinent to Insurance

View Set

Fahmy 2017 -= Basic-german-vocabulary 2 = - German- English

View Set

Vocal Level F - Sentences (Ch. 8-15)

View Set