算法题
Leetcode算法题
二分查找
bool check(int x) {/* ... */} // 检查x是否满足某种性质
// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:
int bsearch_1(int l, int r)
{
while (l < r)
{
int mid = l + r >> 1;
if (check(mid)) r = mid; // check()判断mid是否满足性质
else l = mid + 1;
}
return l;
}
// 区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用:
int bsearch_2(int l, int r)
{
while (l < r)
{
int mid = l + r + 1 >> 1; //主要是防止mid-1变成负数 在 l = 0, r = 1的情况下
if (check(mid)) l = mid;
else r = mid - 1;
}
return l;
}
//作者:yxc
//链接:https://www.acwing.com/blog/content/277/
141. 环形链表
快慢指针做,快指针比慢指针每次多走一步。如果有环两者一定相遇。
思想很简单,就是注意代码的实现,要简洁并且思路清晰
class Solution {
public:
bool hasCycle(ListNode *head) {
auto slow = head, fast = head;
while(slow && fast){
slow = slow->next;
fast = fast->next;
if(fast) fast = fast->next;
else return false;
if(fast == slow) return true;
}
return false;
}
};
142. 环形链表 II
这个是比上一道题多了一个求入口的
笔试题
String
在字符串中分割数字...数字长度太长了所以需要string保存(猿辅导)