xamples
epeat
ode
pproach
ptimize
est
Write an algorithm to calculate the fibonacci sequence
This is to say, given fib(3), return 2.
Assume that the sequence starts as 1,1. Positive numbers only.
Most importantly, talk about the time and space complexity.
function fib(n) {
if (n===1 || n===2) return 1;
return (fib(n-1) + fib(n-2));
}
Nice and Simple, but it duplicates a lot of work.
try it out. fib(60) will crash repl.
Exponential Time Complexity
We can draw out the steps that it's taking
Let's store the results of fib(n) at each step so that we don't have to calculate it again
function fib(n){
var storage = [];
storage[0] = 1;
storage[1]=1;
for (var i=2; i<n;i++){
storage[i] = storage[i-1] + storage[i-2];
}
return storage[n-1];
}
Time complexity of O(n).
Space complexity of O(n).
Do we need to store all the numbers?
Text
function fib(n){
var a=1,b=1,c;
for (var i=2; i<n;i++) {
c = a + b;
a = b;
b = c;
}
return c;
}
Space Complexity of O(1)
Time Complexity of O(n)
function uniqueSub(str){
var leftPoint=0, changePoint=0;
var charArr = [];
var maxStr = '';
for (var i=0; i < str.length; i++){
if (charArr.indexOf(str[i]) < 0){
if (charArr.length < 2){
charArr.push(str[i]); //If it's the first 2 unique chars just push
} else {
charArr = [str[changePoint],str[i]]; //Gets the two new characters
leftPoint = changePoint; //moves the start point
}
changePoint = i; //set changePoint to this new position
} else if (str[i]!==str[i-1]){
changePoint = i;
}
if (i-leftPoint > maxStr.length){ //capture the max string
maxStr = str.slice(leftPoint,i+1);
}
}
return maxStr;
}
console.log(uniqueSub("abcbbbbcccbdddadacb"));
REACTO is not just about solving the problem
REACTO is about learning how to solve problems even when you don't know the answer.
The point is to try and get them to logically approach the problem.
You can tell people to use 2 pointers and walk them.
1. Have them state what they think/know
2. Based on those facts how would they do it?