[LintCode] 462 Total Occurrence of Target

Description
Given a target number and an integer array sorted in ascending order. Find the total number of occurrences of target in the array.


Example
Given [1, 3, 3, 4, 5] and target = 3, return 2.

Given [2, 2, 3, 4, 6] and target = 4, return 1.

Given [1, 2, 3, 4, 5] and target = 6, return 0.


Challenge
Time complexity in O(logn)

4/26/2017

算法班

找左右边界,第一个边界找不出来时候返回0

 1 public class Solution {
 2     /**
 3      * @param A an integer array sorted in ascending order
 4      * @param target an integer
 5      * @return an integer
 6      */
 7     public int totalOccurrence(int[] A, int target) {
 8         if (A == null || A.length == 0) return 0;
 9         int left, right;
10 
11         int start = 0, end = A.length - 1;
12         while (start + 1 < end) {
13             int mid = start + (end - start) / 2;
14             if (A[mid] >= target) {
15                 end = mid;
16             } else {
17                 start = mid;
18             }
19         }
20         if (A[start] == target) {
21             left = start;
22         } else if (A[end] == target) {
23             left = end;
24         } else {
25             return 0;
26         }
27 
28         start = left;
29         end = A.length - 1;
30         while (start + 1 < end) {
31             int mid = start + (end - start) / 2;
32             if (A[mid] <= target) {
33                 start = mid;
34             } else {
35                 end = mid;
36             }
37         }
38 
39         if (A[end] == target) {
40             right = end;
41         } else if (A[start] == target) {
42             right = start;
43         } else {    // shouldn't come to this branch
44             return 0;
45         }
46         return right - left + 1;
47     }
48 }

 

posted @ 2017-04-26 20:20  panini  阅读(511)  评论(0编辑  收藏  举报