zoukankan      html  css  js  c++  java
  • 数字在排序数组中出现的次数

    题目:

    统计一个数字在排序数组中出现的次数。例如:输入排序数组是{1,2,3,3,3,3,4,5},由于这个3在这个数组中出现了4次,因此输出为4。

    解答:

     1 public class Solution {
     2 
     3     public static void main(String[] args) {
     4         int[] arr1 = {1,2,3,3,3,3,4,5};
     5         int target1 = 4;
     6 
     7         System.out.println(getNumberOfK(arr1, target1));
     8 
     9         int arr2 = {2,2,2,2,2};
    10         int target2 = 2;
    11         System.out.println(getNumberOfK(arr2, target2));
    12     }
    13 
    14     public static int getNumberOfK(int[] arr, int k) {
    15         if(arr == null) {
    16             return 0;
    17         }
    18 
    19         int number = 0;
    20         int first = getFirst(arr, k, start, end);
    21         int lat = getLast(arr, k, start, end);
    22 
    23         if(first > -1 && last > -1) {
    24             number = last-first+1;
    25         }
    26 
    27         return number;
    28     }
    29 
    30     private static int getFirst(int[] arr, int k, int start, int end) {
    31         if(start > end) {
    32             return -1;
    33         }
    34 
    35         int mid = (start+end)>>1;
    36         if(k == arr[mid]) {
    37             if(mid > 0 && arr[mid-1] != k) {
    38                 return mid;
    39             } else {
    40                 end = mid - 1;
    41             }
    42         } else if(arr[mid] > k) {
    43             end = mid - 1;
    44         } else {
    45             start = mid + 1;
    46         }
    47 
    48         return getFirst(arr, k, start, end);
    49     }
    50     
    51 
    52     private static int getLast(int[] arr, int k, int start, int end) {
    53         if(start > end) {
    54             return -1;
    55         }
    56 
    57         int mid = (start+end)>>1;
    58         if(arr[mid] == k) {
    59             if(mid < arr.length-1 && arr[mid] != k) {
    60                 return mid;
    61             } else {
    62                 start = mid + 1;
    63             } else if(arr[mid] > k) {
    64                 end = mid - 1;
    65             } else {
    66                 start = mid + 1;
    67             }
    68         }
    69 
    70         return getLast(arr, k, start, end);
    71     }
    72 }

  • 相关阅读:
    1.两数之和
    [Udemy] ES 7 and Elastic Stack
    [Udemy] ES 7 and Elastic Stack
    Common Linux Commands 日常工作常用Linux命令
    ELK 学习
    web 3d 技术预研及数据可视化技术
    AWS Cloud Practioner 官方课程笔记
    怎么用 pytorch 查看 GPU 信息
    ECG 项目预研
    怎么查看keras 或者 tensorflow 正在使用的GPU
  • 原文地址:https://www.cnblogs.com/wylwyl/p/10475657.html
Copyright © 2011-2022 走看看