和我一起迎接明天的太阳吧

klaus08

焦虑源于行动的匮乏

JZ37 数字在升序数组中出现的次数

原题链接


描述

统计一个数字在升序数组中出现的次数。


示例

输入:[1,2,3,3,3,3,4,5],3
返回值:4

思路

二分法首先招待该元素,然后依次向前后遍历,记录相同元素的个数。


解答

public class Solution {
    public static int GetNumberOfK(int[] array, int k) {
        int cnt = 0;
        int l = 0, h = array.length - 1;
        int index = 0;
        while (l < h) {
            int m = (l + h) / 2;
            if (array[m] > k) {
                h = m;
            } else if (array[m] < k) {
                l = m + 1;
            } else {
                index = m;
                break;
            }
        }
        int i = index, j = index + 1;
        while (i >= 0 && array[i] == k) {
            if (array[i--] == k) cnt++;
        }
        while (j < array.length && array[j] == k) {
            if (array[j++] == k) cnt++;
        }
        return cnt;
    }

}
posted @ 2021-08-13 23:21  klaus08  阅读(27)  评论(0编辑  收藏  举报