您的位置:首页 > 其它

十三周 Dynamic programming counting bits

2017-06-04 13:00 260 查看



Problem


Given a sorted array of n integers, find the starting and ending position of a given target value.

If the target is not found in the array, return 
[-1, -1]
.


Example

Given 
[5, 7, 7, 8, 8, 10]
 and target value 
8
,

return 
[3, 4]
.

首先,建立二元结果数组res,起点start,终点end。

二分法求左边界:

当中点小于target,start移向中点,否则end移向中点;

先判断起点,再判断终点是否等于target,如果是,赋值给res[0]。

二分法求右边界:

当中点大于target,end移向中点,否则start移向中点;

先判断终点,再判断起点是否等于target,如果是,赋值给res[1]

#include <iostream>  

#include <vector>   

using namespace std;  

  

class Solution {  

public:  

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

        if(nums.size() == 0)  

        {  

            return vector<int>(2, -1);  

        }  

  

        vector<int> result;  

        int begin = 0;  

        int end = nums.size()-1;  

  

        int mid;  

        while(begin < end)  

        {  

            mid = (begin + end) / 2;  

            if(target > nums[mid])  

            {  

                begin = mid + 1;  

            }  

            else  

            {  

                end = mid;  

            }  

        }  

  

        if(nums[begin] != target)  

        {  

            return vector<int>(2, -1);  

        }  

  

        result.push_back(begin);  

        end = nums.size()-1;  

          

        while(begin < end)  

        {  

            if(begin == end - 1)  

            {  

                if(target == nums[end])  

                {  

                    break;  

                }  

                else  

                {  

                    end = end - 1;  

                    break;  

                }  

            }  

  

            mid = (begin + end) / 2;  

            if(target == nums[mid])  

            {  

                begin = mid;  

            }  

            else  

            {  

                end = mid - 1;  

            }  

        }  

  

        result.push_back(end);  

  

        return result;  

    }  

};  

  

int main()  

{  

    int a[6] = {8, 8, 8, 8, 8, 9};  

    vector<int> test(a, a+6);  

  

    Solution ss;  

  

    vector<int> result = ss.searchRange(test, 9);  

  

    cout << result[0] << "," <<  result[1] << endl;  

  

    return 0;  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: