剑指offer:数字在排序数组中出现的次数

标签: 剑指offer
0人阅读 评论(0) 收藏 举报
分类:

题目描述

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

思路

二分,当data[mid]==k的时候,在往左和右找等于K的,计数,计数的时候不要忘了data[mid]也,不要多算一次data[mid],还有就是注意data只有一个元素的时候

code

class Solution {
public:

    int GetNumberOfK(vector<int> data ,int k) {
        int left=0;
        int right=data.size()-1;
        int mid=(left+right)/2;
        int res=0;
        while(left<=right){
            while(left<=right&&data[mid]>k){
                right=mid-1;
                mid=(left+right)/2;
            }
            while(left<=right&&data[mid]<k){
                left=mid+1;
                mid=(left+right)/2;
            }
            if(data[mid]==k){
                int temp=mid+1;
                while(mid>=0&&data[mid]==k){
                    res++;
                    mid--;
                }
                while(temp<data.size()&&data[temp]==k){
                    res++;
                    temp++;
                }
                return res;
            }
        }
        return res;
    }
};
查看评论

《剑指Offer》面试题:统计一个数字在排序数组中出现的次数

题目 题目描述: 统计一个数字在排序数组中出现的次数。 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数组的大小。1...
  • u010412719
  • u010412719
  • 2015-09-12 22:23:12
  • 1326

剑指Offer:面试题29——数组中出现次数超过一半的数字(java实现)

PS:在前几天的面试中,被问到了这个题。然而当时只能用最低效的方法来解。问题描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2...
  • lilianforever
  • lilianforever
  • 2016-07-08 11:34:50
  • 1342

剑指Offer面试题56:数组中数字出现的次数

/* *面试题56:数组中数字出现的次数:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 */ //num1,num2分别为长度为1的数组。传出参数 /...
  • lwl2014100338
  • lwl2014100338
  • 2018-01-20 12:58:24
  • 51

数字在排序数组中出现的次数(剑指offer面试题56)

题目描述 统计一个数字在排序数组中出现的次数。 题目思路: 1)常规思路:对该数字在数组中遍历,计数出现次数 2)改进:既然是一个排序数组,很自然就可以想到二分查找。 用二分查找...
  • sxs11
  • sxs11
  • 2017-07-20 01:38:10
  • 115

剑指Offer面试题29(java版):数组中出现次数超过一半的数字

题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现5次,超过数组长度的一半,因此输出2....
  • jsqfengbao
  • jsqfengbao
  • 2015-08-08 19:25:35
  • 1805

剑指Offer(第二版)面试题56:数组中数字出现的次数

剑指Offer(第二版)面试题56:数组中数字出现的次数
  • qq_25827845
  • qq_25827845
  • 2017-06-22 20:07:35
  • 1477

数组中出现次数超过一半的数字||剑指offer

题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2...
  • jiangjieqazwsx
  • jiangjieqazwsx
  • 2016-03-21 17:38:02
  • 291

剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)

腾讯 2015秋招 编程题4:微信红包中个数超过总数一半的红包金额 题目描述 春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一...
  • yanglr2010
  • yanglr2010
  • 2016-05-14 22:24:26
  • 1399

统计数字在排序数组中出现的次数

题目:统计一个数字在排序数组中出现的次数。例如输入输入排序数组{1,2,3,3,4,5}和数字3,输出2. 思路:使用二分查找法,时间复杂度O(logN) package offer; /** ...
  • u013238950
  • u013238950
  • 2016-03-12 20:13:01
  • 1437
    个人资料
    持之以恒
    等级:
    访问量: 3722
    积分: 583
    排名: 9万+
    最新评论