十三周 Dynamic programming counting bits

来源:互联网 发布:林小宅的淘宝店叫什么 编辑:程序博客网 时间:2024/06/18 14:42

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]

  1. #include <iostream>  
  2. #include <vector>   
  3. using namespace std;  
  4.   
  5. class Solution {  
  6. public:  
  7.     vector<int> searchRange(vector<int>& nums, int target) {  
  8.         if(nums.size() == 0)  
  9.         {  
  10.             return vector<int>(2, -1);  
  11.         }  
  12.   
  13.         vector<int> result;  
  14.         int begin = 0;  
  15.         int end = nums.size()-1;  
  16.   
  17.         int mid;  
  18.         while(begin < end)  
  19.         {  
  20.             mid = (begin + end) / 2;  
  21.             if(target > nums[mid])  
  22.             {  
  23.                 begin = mid + 1;  
  24.             }  
  25.             else  
  26.             {  
  27.                 end = mid;  
  28.             }  
  29.         }  
  30.   
  31.         if(nums[begin] != target)  
  32.         {  
  33.             return vector<int>(2, -1);  
  34.         }  
  35.   
  36.         result.push_back(begin);  
  37.         end = nums.size()-1;  
  38.           
  39.         while(begin < end)  
  40.         {  
  41.             if(begin == end - 1)  
  42.             {  
  43.                 if(target == nums[end])  
  44.                 {  
  45.                     break;  
  46.                 }  
  47.                 else  
  48.                 {  
  49.                     end = end - 1;  
  50.                     break;  
  51.                 }  
  52.             }  
  53.   
  54.             mid = (begin + end) / 2;  
  55.             if(target == nums[mid])  
  56.             {  
  57.                 begin = mid;  
  58.             }  
  59.             else  
  60.             {  
  61.                 end = mid - 1;  
  62.             }  
  63.         }  
  64.   
  65.         result.push_back(end);  
  66.   
  67.         return result;  
  68.     }  
  69. };  
  70.   
  71. int main()  
  72. {  
  73.     int a[6] = {8, 8, 8, 8, 8, 9};  
  74.     vector<int> test(a, a+6);  
  75.   
  76.     Solution ss;  
  77.   
  78.     vector<int> result = ss.searchRange(test, 9);  
  79.   
  80.     cout << result[0] << "," <<  result[1] << endl;  
  81.   
  82.     return 0;  
  83. }