Java之《剑指Offer》:统计一个数字在升序数组中出现的次数。

1. 题目描述

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

  题目分析:

  1. 升序数组中查找一个数,可以使用查找方法,比如二分查找,排序查找,这里选择二分查找
  2. 查找到这个数后,因为数组是有序的,所以找出现的次数只能是在该数的左边或者是右边
  3. 定义变量计数

2. 代码实现

import java.util.Arrays;
public class Solution {
    public int GetNumberOfK(int [] array , int k) {
        //定义计数器
        
        /*
        1.升序数组
        2.一个数字在数字中的出现的次数
        */
        //二分查找,直接调用二分查找函数,返回的是查找后的第一个出现的数的数组下标
        int index = Arrays.binarySearch(array,k);
        
        int count = 1;
        
        //判断下:,数组下标是否符合条件
        if(index < 0){
            return 0;
        }
        //下面的是已经找到index下标相等的数
        //现在通过二分查找已经找到和K相等的数,现在判断数组的两边是否有和K相等的数
        //定义便利,技术count
        //对index右边进行判断,是否相等
        for(int i = index + 1 ; i < array.length && array[i] == k;i++){
            count ++;
        }
        //判断index左边是否和array[index]是否相等
        for(int j = index - 1;j >= 0 && array[j] == k;j--){
            count ++;
        }
        return count;
    }
}

 

3. 总结

  1. 本题比较简单,数组中的查找,二分法
  2. 加点难度,无序的数组,首先要排序,也不难
  3. 数据结构与算法分析的基本算法要会,下面开始二叉树的复习了,也是比较麻烦的
  4. 今天是1024程序员的节日,程序员节日快乐!坚持!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值