### Find Minimum in Rotated Sorted Array

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., `0 1 2 4 5 6 7`

might become `4 5 6 7 0 1 2`

).

Find the minimum element.

You may assume no duplicate exists in the array.

1 | /** |

### Find Minimum in Rotated Sorted Array II

Follow up for “Find Minimum in Rotated Sorted Array”:

What if duplicates are allowed?Would this affect the run-time complexity? How and why?

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., `0 1 2 4 5 6 7`

might become `4 5 6 7 0 1 2`

).

Find the minimum element.

The array may contain duplicates.

1 | /** |

### Find Mode in Binary Search Tree

Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred element) in the given BST.

Assume a BST is defined as follows:

- The left subtree of a node contains only nodes with keys less than or equal to the node’s key.
- The right subtree of a node contains only nodes with keys greater than or equal to the node’s key.
- Both the left and right subtrees must also be binary search trees.

For example:

Given BST `[1,null,2,2]`

,

1 | 1 |

return [2].

Note: If a tree has more than one mode, you can return them in any order.

Follow up: Could you do that without using any extra space? (Assume that the implicit stack space incurred due to recursion does not count).

1 | /** |

### Find Peak Element

A peak element is an element that is greater than its neighbors.

Given an input array where `num[i] ≠ num[i+1]`

, find a peak element and return its index.

The array may contain multiple peaks, in that case return the index to any one of the peaks is fine.

You may imagine that `num[-1] = num[n] = -∞`

.

For example, in array `[1, 2, 3, 1]`

, 3 is a peak element and your function should return the index number 2.

1 | /** |

### Find Right Interval

Given a set of intervals, for each of the interval i, check if there exists an interval j whose start point is bigger than or equal to the end point of the interval i, which can be called that j is on the “right” of i.

For any interval i, you need to store the minimum interval j’s index, which means that the interval j has the minimum start point to build the “right” relationship for interval i. If the interval j doesn’t exist, store -1 for the interval i. Finally, you need output the stored value of each interval as an array.

**Note**

- You may assume the interval’s end point is always bigger than its start point.
- You may assume none of these intervals have the same start point.

**Example1:**

1 | Input: [ [1,2] ] |

**Example2:**

1 | Input: [ [3,4], [2,3], [1,2] ] |

**Example3:**

1 | Input: [ [1,4], [2,3], [3,4] ] |

1 | ; |