We review a few more coding problems.
Node TreeSuccesor (Node root)
{
If root.right return TreeMinimum (root.right);
Node x = root;
Node y = root.parent;
while ( y && x == y.right)
{
x = y;
y = y.parent;
}
return y;
}
Another one is about merging a few time intervals
Collapse(List<Tuple<int,int>> intervals)
{
var cmp = new IntervalComparator();
intervals.sort(cmp); //
var s = new Stack<Tuple<int,int>>();
s.Push(interval[0]);
for (int I = 0; I< intervals.count; I++)
{
var top = s.top();
if (top.end < interval[I].start)
s.push(interval[I];
else if (top.end < interval[I].end){
top.end = interval[I].end;
s.pop();
s.push(top);
}
}
while (!s.empty())
{
Interval t = s.top();
console.writeline("{0}-{1}",t.first, t.second);
s.pop();
}
}
Another one is about finding max subarray:
int GetMaxSubarray(List<int> items)
{
int x = 0; // sum
int y = 0; // minimum sum
int z = 0; // maximum sum
for( int I =0 ; I < items.Length; I++)
{
x = x+ items[I];
if (x < y)
y = x;
if (x-y > z)
z = x-y;
}
return z;
}
Another one is about beating the stock market. We are given an array for which the ith element is the price of a given stock on day i. If we were only permitted to buy one share of the stock and sell one share of the stock, we have to find the best times to buy and sell to get the best deal.
int GetBestDeal(List<int> prices)
{
int min = 0;
int deal = -1;
for (int I = 1; I < prices.Count; i++)
{
if (prices[i] < prices[min])
min = i;
if (prices[i] - prices[min] > deal)
deal = prices[i] - prices[min];
}
return deal;
}
Find all pair paths in a graph
We use backtracking for finding all the paths.
void allpaths(int[,] graph, int n, int src, int dest, int threshold, ref List<int> candidatePath ...
for (int i = 0; i < adjacencies(src).Count; i++)
{
// avoid cycles
// avoid those exceeding threshold
candidatePath.Add(adjacencies(src)[i]);
candidateDist.Add(distances[i]);
allpaths(graph, n, adjacencies(src)[i], dest, threshold, candidatePath ...
candidatePath.Remove(adjacencies(src)[i]);
candidateDist.RemoveAt(candidateDist.Count - 1);
}
Node TreeSuccesor (Node root)
{
If root.right return TreeMinimum (root.right);
Node x = root;
Node y = root.parent;
while ( y && x == y.right)
{
x = y;
y = y.parent;
}
return y;
}
Another one is about merging a few time intervals
Collapse(List<Tuple<int,int>> intervals)
{
var cmp = new IntervalComparator();
intervals.sort(cmp); //
var s = new Stack<Tuple<int,int>>();
s.Push(interval[0]);
for (int I = 0; I< intervals.count; I++)
{
var top = s.top();
if (top.end < interval[I].start)
s.push(interval[I];
else if (top.end < interval[I].end){
top.end = interval[I].end;
s.pop();
s.push(top);
}
}
while (!s.empty())
{
Interval t = s.top();
console.writeline("{0}-{1}",t.first, t.second);
s.pop();
}
}
Another one is about finding max subarray:
int GetMaxSubarray(List<int> items)
{
int x = 0; // sum
int y = 0; // minimum sum
int z = 0; // maximum sum
for( int I =0 ; I < items.Length; I++)
{
x = x+ items[I];
if (x < y)
y = x;
if (x-y > z)
z = x-y;
}
return z;
}
Another one is about beating the stock market. We are given an array for which the ith element is the price of a given stock on day i. If we were only permitted to buy one share of the stock and sell one share of the stock, we have to find the best times to buy and sell to get the best deal.
int GetBestDeal(List<int> prices)
{
int min = 0;
int deal = -1;
for (int I = 1; I < prices.Count; i++)
{
if (prices[i] < prices[min])
min = i;
if (prices[i] - prices[min] > deal)
deal = prices[i] - prices[min];
}
return deal;
}
Find all pair paths in a graph
We use backtracking for finding all the paths.
void allpaths(int[,] graph, int n, int src, int dest, int threshold, ref List<int> candidatePath ...
for (int i = 0; i < adjacencies(src).Count; i++)
{
// avoid cycles
// avoid those exceeding threshold
candidatePath.Add(adjacencies(src)[i]);
candidateDist.Add(distances[i]);
allpaths(graph, n, adjacencies(src)[i], dest, threshold, candidatePath ...
candidatePath.Remove(adjacencies(src)[i]);
candidateDist.RemoveAt(candidateDist.Count - 1);
}
No comments:
Post a Comment