zoukankan      html  css  js  c++  java
  • 14. First Position of Target 【easy】

    14. First Position of Target 【easy】

    For a given sorted array (ascending order) and a targetnumber, find the first index of this number in O(log n) time complexity.

    If the target number does not exist in the array, return -1.

    Example

    If the array is [1, 2, 3, 3, 4, 5, 10], for given target 3, return 2.

    Challenge 

    If the count of numbers is bigger than 2^32, can your code work properly?

    解法一:

     1 class Solution {
     2 public:
     3     /**
     4      * @param nums: The integer array.
     5      * @param target: Target number to find.
     6      * @return: The first position of target. Position starts from 0. 
     7      */
     8     int binarySearch(vector<int> &array, int target) {
     9         if (array.size() == 0) {
    10             return -1;
    11         }
    12         
    13         int start = 0;
    14         int end = array.size() - 1;
    15         
    16         while (start + 1 < end) {
    17             int mid = start + (end - start) / 2;
    18             
    19             if (array[mid] == target) {
    20                 end = mid;
    21             }
    22             else if (array[mid] < target) {
    23                 start = mid;
    24             }
    25             else if (array[mid] > target) {
    26                 end = mid;
    27             }
    28         }
    29         
    30         if (array[start] == target) {
    31             return start;
    32         }
    33         
    34         if (array[end] = target) {
    35             return end;
    36         }
    37         
    38         return -1;
    39     }
    40 };

    解法二:

     1 class Solution {
     2 public:
     3 
     4     int find(vector<int> &array, int start, int end, int target) {
     5         if (start > end) {
     6             return -1;
     7         }
     8         
     9         int mid = start + (end - start) / 2;
    10         
    11         if (array[mid] == target) {
    12 
    13             if (array[mid - 1] != target) {
    14                 return mid;
    15             }
    16 
    17             return find(array, start, mid - 1, target);
    18         }
    19         else if (array[mid] > target) {
    20             return find(array, start, mid - 1, target);
    21         }
    22         else if (array[mid] < target) {
    23             return find(array, mid + 1, end, target);
    24         }
    25         
    26     }
    27 
    28     /**
    29      * @param nums: The integer array.
    30      * @param target: Target number to find.
    31      * @return: The first position of target. Position starts from 0. 
    32      */
    33     int binarySearch(vector<int> &array, int target) {
    34         // write your code here
    35         
    36         int start = 0;
    37         int end = array.size();
    38         
    39         return find(array, start, end, target);
    40         
    41     }
    42 };
  • 相关阅读:
    permission 文档 翻译 运行时权限
    TabLayout ViewPager Fragment 简介 案例 MD
    Log 日志工具类 保存到文件 MD
    OkHttp 官方wiki 翻译 MD
    Okhttp 简介 示例 MD
    OkHttp 官方Wiki之【使用案例】
    DialogPlus
    倒计时 总结 Timer Handler CountDownTimer RxJava MD
    RecyclerView 判断滑到底部 顶部 预加载 更多 分页 MD
    CSS3的媒体查询(Media Queries)与移动设备显示尺寸大全
  • 原文地址:https://www.cnblogs.com/abc-begin/p/7543862.html
Copyright © 2011-2022 走看看