Linked List Cycle
判断链表是否有环:两个指针移动,一个指针(慢指针)一次移动一步,另一个指针(快指针)一次移动两步,如果两个指针相遇,说明有环,否则没有环
Linked List Cycle II
链表找环:先判断是否有环,如果有环,则慢指针和快指针在换上相遇,假设链头到环起点的长度为a,环的长度为b,慢指针移动了x步,则快指针移动了2x=x+tb步,有x=tb,S(a+x)=S(a+tb)=S(a),即此时慢指针和表头同时移动,这他们在环起点相遇,且移动的步数为a
int i = 1;
while (i < n && a[i - 1] <= a[i]) i++;
// 结果为i - 1
二分查找
int left = 0;
int right = nums.size() - 1;
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid] < nums[mid + 1]) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
leetcode题目总结
Top 10 algorithms in Interview Questions
数组
链表
哈希表
需要借助map/unordered_map、数组实现的算法
排序
动态规划
Decode Ways
House Robber
Unique Binary Search Trees 求1...n构成的二叉搜索树的个数
Edit Distance 求两个字符串的编辑距离?已知str1[1...m], str2[1...n],求dist[m][n], 其中
查找
Find Peak Element 查找数组(INT_MIN, a[1], a[2], ... , a[n], INT_MIN)的峰值
二分查找