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

     题目描述:统计一个数字在排序数组中出现的次数。

    解法一:

    public class Solution {
        public int GetNumberOfK(int [] array , int k) {
            int count=0;
            for(int i=0;i<array.length;i++){
               if(array[i]==k)
                   count++;
           }
            return count;
        }
    }

    解法二:

    public class Solution {
        public int GetNumberOfK(int [] array , int k) {
          int num = 0;
            if (array != null && array.length > 0) {//分两种搜索,往前,和往后
                int firstKIndex = getFirstK(array, k, 0, array.length - 1);
                int lastKIndex = getLastK(array, k, 0, array.length - 1);
                if (firstKIndex > -1 && lastKIndex > -1)
                    num = lastKIndex - firstKIndex + 1;
            }
            return num;
        }
        public  int getFirstK(int[] array, int k, int start, int end) {
            if (start > end)
                return -1;
            int middleIndex = start + (end - start) / 2;
            int middleData = array[middleIndex];
            if (middleData == k) {
                if (middleIndex > 0 && array[middleIndex - 1] != k || middleIndex == 0) {
                    return middleIndex;
                } else
                    end = middleIndex - 1;
            } else if (middleData > k) {
                end = middleIndex - 1;
            } else
                start = middleIndex + 1;
            return getFirstK(array, k, start, end);
        }
        public  int getLastK(int array[], int k, int start, int end) {
            if (start > end) {
                return -1;
            }
            int middleIndex = (start + end) / 2;
            int middleData = array[middleIndex];
            if (middleData == k) {
                if (middleIndex < array.length - 1 && array[middleIndex + 1] != k || middleIndex == array.length - 1)
                    return middleIndex;
                else
                    start = middleIndex + 1;
            } else if (middleData < k) {
                start = middleIndex + 1;
            } else
                end = middleIndex - 1;
            return getLastK(array, k, start, end);
     
        }
    }
  • 相关阅读:
    [題解]51nod_1515_明辨是非
    任务调度问题(贪心) hdu4864
    B站学习记:贪心与博弈
    poj1505(二分+贪心)
    温故知新:互质排列
    Radar Installation(利用数据有序化进行贪心选择)
    Wooden Sticks(贪心)
    计算a除b的第一位小数 in C++.
    龙龙的暑假贪心算法大冒险
    HDU-2037(贪心)
  • 原文地址:https://www.cnblogs.com/tjuxqcui/p/5538057.html
Copyright © 2011-2022 走看看