Write a program to reverse a singly linked list? Modify that program to reverse a doubly linked list.
C Interview Questions
Print out the prime numbers between 1 and 100. As a first pass, don't worry about writing an efficient algorithm. Just write clear code that is easy to follow. Once you've done that, consider different possible optimizations.
Given the following C code:
struct department {
char name[20];
int id;
};
struct department d;
add a typedef to allow easy declaration of departments and add some code that uses the typedef.
What is a register variable in C? When would you use one? What is the downside of using this storage class?
What would the following C code print out?:
#include <stdio.h>
main()
{
int i=2,j=3;
i=j++ + i++;
j=++j + ++i;
printf("%d%d\n",i,j);
}
Explain what the following code does:
#include <stdio.h>
int main()
{
int i;
int *p;
i = 2;
p = &i;
*p = 3;
printf("%d\n", i);
return 0;
}
Use Newton's method to approximate the square root of a method. Newton's method is to approximate z = Sqrt(x) by picking a starting point z and then repeating:
z = z - (z*z - x)/(2*z)
Pick a sensible point to stop the iteration.
Suppose you have an array of 99 numbers. The array contains the digits 1 to 100 with one digit missing. Describe four different algorithms to compute the missing number. Two of these should optimize for low storage and two of these should optimize for fast processing.
Write a string to find a substring in a given string. Do this in O(n) or better
Write an iterative function to reverse a string. Do the same thing as a recursive function.
Write a function to implement strstr() i.e. find the first occurrence of one string inside another string.
Write a program to print out a multiplication table, from 1x1 to 12x12. This should look like:
1 2 3 4 5 6 7 8 9 10 11 12
2 4 6 8 10 12 14 16 18 20 22 24
3 6 9 12 15 18 21 24 27 30 33 36
4 8 12 16 20 24 28 32 36 40 44 48
5 10 15 20 25 30 35 40 45 50 55 60
6 12 18 24 30 36 42 48 54 60 66 72
7 14 21 28 35 42 49 56 63 70 77 84
8 16 24 32 40 48 56 64 72 80 88 96
9 18 27 36 45 54 63 72 81 90 99 108
10 20 30 40 50 60 70 80 90 100 110 120
11 22 33 44 55 66 77 88 99 110 121 132
12 24 36 48 60 72 84 96 108 120 132 144
What is a hashtable? Give an example of a type of problem that a hashtable is useful for.
Explain big o notation and how it is useful in computer science to classify algorithms.
- What order is a hash table lookup?
- What order is determining if a number is even or odd?
- What order is finding an item in an unsorted list?
- What order is a binary search?
For the data structures: Array and Linked List explain:
- Where you might use them
- Operations that are commonly supported (add, insert etc)
Describe bitwise operators AND, OR, XOR and NOT. Describe how you might use these.
How do these bitwise operators differ from logical operators?
What's the value of hexadecimal FF in decimal?
Write a program to find the largest integer in an array of integers.
Write a function that sums up integers from a text file that looks like the following:
1
3
27
2
2123
Write function to print the odd numbers from 1 to 99
Write a program to open a file for reading and print out its entire contents
Write a function to take the following list and return one list of odd numbers and one list of even numbers:
ints = [1,21,53,84,50,66,7,38,9]
Explain the difference between a mutex and a semaphore? If you need to protect access to an increment operation which one would be the best choice?
Write a program to measure how long a context switch takes on the Unix operating system.
If you have access to a function that returns a random integer from one to five, write another function which returns a random integer from one to seven.
Discuss an algorithm to traverse a tree, depth first.
Implement a function with signature find_chars(string1, string2) that takes two strings and returns a string that contains only the characters found in string1 and string two in the order that they are found in string1. Implement a version of order N*N and one of order N.
You have to debug a crashing application. You are given the source. When you run it repeatedly in a debugger you observe that it never crashes in the same place twice. It uses only the C standard library and is single threaded.
What coding errors could cause the crashes? How would you find them?
Explain what a deadlock is in multithreaded programming
Given a circular list of integers (when you reach the end of the list you come back to the beginning), what is the most efficient algorithm to find the smallest integer in the list?
For example: circular_list = [22, 52, 66, 82, 5, 8, 12, 19].
Given a N by N matrix of both negative and positive integers. Write an efficient algorithm to find the sub-matrix with the largest sum of all the contained elements.
Implement a function to divide two integers without using the divide operator.
Design a system to efficiently calculate the top 1MM Google search queries and create a report of these. Additionally:
- You are given twelve servers
- Each has two processors, 4GB of ram and four 400GB hard drives.
- The machines are networked
- The log data as roughly 100 Billion log lines in it.
- The log data comes in twelve, 320 Gb files.
- Each line of the files has roughly 40 search queries
- You can only use open source software or software that you write.
Given an array A[N] containing N numbers. Crate an array Output[N] where Output[i] is equal to the product of all the elements of A[N] except A[i].
For example Output[0] is the product of A[1] to A[N-1] and Output[1] is the product of A[0] and from A[2] to A[N-1].
Do this without using the division operator. Do it in O(n).
You are given a linked list of integers of length N.
N is very large and you don’t know N.
Write a function to return k completely random numbers from the list.
Do this in O(n).
Hint: Use random function rand() (returns a number between 0 and 1) and irand() (return either 0 or 1) 2.
Write a function to efficiently determine the result of a game of Tic Tac Toe.
The function takes as input the game and the sign (x or o) of the player. The function returns if this player has won the game or not.
Carefully consider both the data structure and the algorithm for your answer.
Given any integer, efficiently find the next highest integer that uses the same digits.
For example if the number is 15432, you should return 21345.
Write a function that takes an integer and returns the smallest number that is greater than the given number which is a palendrome.
For example, if the input was 111 the next palindromic number would be 121.
Write a function that, given a word and a dictionary will efficiently return the minimal edits (character addition or deletion) to get to a word that exists in the dictionary.
Write a function, tokenize_string(input_string, delimiter_list) that returns a list of strings that are separated by the delimiters.
For example: tokenize_string("How now, Mrs. Brown Cow") returns ['How', 'now', 'Mrs', 'Brown', 'Cow']
Write a function to efficiently determine if a linked list has a cycle in it.
Write a function that takes as input a sorted array and modifies the array to compact it, removing duplicates. Also return the new length of the array.
Notes: The input array might be very large.
For example:
- input array =
[1, 3, 7, 7, 8, 9, 9, 9, 10] - transformed array =
[1, 3, 7, 8, 9, 10] - size = 6
Given two arrays of strings, A and B.
B contains every element in A, and has one additional member, for example:
* A = ['dog', 'cat', 'monkey]
* B = ['cat', 'rat', 'dog', 'monkey']
Write a function to find the extra string in B. Do this in O(n)
Express the following table as a static structure, and write a function, find_routes(source, destination) that efficiently outputs all possible routes.
Source | Dest
~~~~~~ ~~~~
Seattle | LA
LA | Florida
LA | Maine
Florida | Seattle
Seattle | Florida
The solution for find_routes('Seattle', 'Florida') should be [Seattle -> Florida, Seattle -> LA -> Florida]
Write a function to efficiently convert a floating point number to a rational number. For example, given 0.125 return "1/8"
Write a function that takes an unsorted integer array, and returns a three element subset whose sum is zero.
Note: This is a special case of the SUBSET-SUM problem. That problem is NP-complete, but we're only looking for subsets of 3 elements. This can be achieved in polynomial time.
Write a function that takes as input a string, and outputs that same string, with any parentheses in it balanced. Do this using the minimum number of edits.
Write a function that takes an array of integers and returns that array rotated by N positions.
For example, if N=2, given the input array [1, 2, 3, 4, 5, 6] the function should return [5, 6, 1, 2, 3, 4]
The least common multiple of a set of integers is the smallest positive integer that is a multiple of all of the integers in the set.
Write a function that takes an array of integers and efficiently calculates and returns the LCM.
Write a function that takes as input a binary tree, and returns the length of the longest path.
For example, in this binary tree:
1
/ \
2 3
/
5
the answer is 2, since the path from vertex 1 to vertex 5 involves two edge traversals.
Write function that takes a binary tree and efficiently returns the Nth smallest element.
For example, if N=4, and the tree looks like:
3
/ \
2 5
/ / \
1 4 6
The function should return 4.
Write a function that takes as input two numbers represented as strings, and returns the product of the numbers of a string.
The numbers can be arbitrarily large.
Write a function that takes as input a binary tree, and prints out each level of the tree on a newline. For example:
a
/ \
b c
/ / \
d e f
will output:
a
b c
d e f
Given a file of size 1TB, containing only 32 bit integers, describe how you would efficiently sort it. You have only 2GB of memory available.
Write a function that takes a an array of integers, and returns the contiguous subsequence of integers with the largest sum.
Write a function to efficiently find the fifth maximum element in a binary search tree. Try to do this without using significant additional storage.
Explain the terms "coupling" and "Cohesion". Is low coupling and high cohesion desirable? Why?
Explain the principles of test drive development.
Write a function to return the Nth number of Fibonacci sequence.
What's the maximum unsigned integer that you can store using n bits? What's the maximum signed integer?
Explain the difference between pass by value and pass by reference in a C program. Write a short program that illustrates the difference.