算法题

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保存(猿辅导)

posted on 2021-03-18 11:18  BITChase  阅读(55)  评论(0编辑  收藏  举报

导航