美文网首页
google flag第一周 九章算法班第二次课 2019-03

google flag第一周 九章算法班第二次课 2019-03

作者: 七步诗人 | 来源:发表于2019-03-04 01:11 被阅读0次

    今天搬家没来得及预习,所幸之前看过二分法的课,也基本跟上了,但还是来不及做一些提前的思考,题目都是临时看的,下次改正。

    内容基本就是说二分法作为唯一的O(logn)时间复杂度的算法非常重要,基本O(n)可以优化的都是用二分法解决。

    二分法有一个固定模板,基本保证不会出错,如下:


    int findPosition(vector<int> &nums, int target) {

            // write your code here

            if (nums.empty()) {

                return -1;

            }

            int start = 0, end = nums.size() - 1;

            while (start + 1 < end) {

                int mid = start + (end - start) / 2;

                if (nums[mid] == target) {

                    return mid;

                } else if (nums[mid] < target) {

                    start = mid;

                } else {

                    end = mid;

                }

            }

            if (nums[start] == target) {

                return start;

            }

            if (nums[end] == target) {

                return start;

            }

            return -1;

        }


    二分法从简到难的层级分别为:

    1、找到目标出现的任意位置、第一次出现的位置、最后出现的位置;

    基本一样,只是对三个if的处理不一样,比如:最后一次出现,应该这样写

            int start = 0, end = nums.size() - 1;

            while (start + 1 < end) {

                int mid = start + (end - start) / 2;

                if (nums[mid] <= target) {

                    start = mid;

                } else {

                    end = mid;

                }

            }

    1)经典二分搜索

    2)找第一个位置的二分搜索

    3)找最后一个位置的二分搜索

    2、第二境界,二分位置之XXOO,找出数组中第一个/最后一个满足条件的位置,第一境界只是找元素,故此分开

    1)first bad version

    2)find k closet elements(二分+双指针算法)

    3)search in a big sorted array(倍增法找到边界)

    4)Find Minimum in Rotated Sorted Array(确定target的值)

    5)Maximum Number in Mountain Sequence(根据升降序确定左右边界)

    3、第三境界,二分位置之Half half

    相关文章

      网友评论

          本文标题:google flag第一周 九章算法班第二次课 2019-03

          本文链接:https://www.haomeiwen.com/subject/ridvuqtx.html