• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

剑指Offer的学习笔记(C#篇)-- 数字在排序数组中出现的次数

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

题目描述

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

一 . 题目分析

        该题目并不是难题,但该题目考察目的是正确的选择合适的查找方法。题目中有一个关键词是:排序数组,也就是说,该数组已经排好了,我一开始直接遍历了一遍数组,有相同的就加1,代码量虽然很少,但这很显然是效率很低的方法。所以又重新码了二分查找法的代码。

        根据题意,使用这种方法要考虑到两点:

        1. 把二分查找法先构造出来。

        2. 统计数字k在数组中出现次数。

二 . 代码实现

class Solution
{
    public int GetNumberOfK(int[] data, int k)
    {
        // write code here
        // 鲁棒判断
        if (data.Length == 0)
        return 0;
// 使用二分查找法:定义前指针min,后指针max,中间指针mid,计数器count int min = 0,max = data.Length - 1,mid = 0,count = 0;
// 构建二分查找模型 while(min <= max) { if (min > max) break; mid = (max+min)/2; if(data[mid] == k) { break; } else if(data[mid]<k) { min = mid+1; } else { max = mid-1; } }
// 若存在中间数 == k,给count赋值为1 if(data[mid] == k) { count = 1; }
// 统计一个k在排序数组中出现的次数 for (int i = 1; i < data.Length; i++) {
// 定义循环停止条件,提高效率
bool firstFlag = false; bool secondFlag = false;

// 左侧重复数的累加
if (mid - i >= 0 && data[mid - i] == k) { firstFlag = true; count++; }

// 右侧重复数的累加
if (mid + i < data.Length && data[mid + i] == k) { secondFlag = true; count++; }

// 循环停止条件
if (firstFlag == false && secondFlag == false) { break; } }
// 返回次数 return count; } }

         做题目的时候最好先自己写写画画,设置好逻辑关系非常重要!!


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#DateTime和DateTime?格式化时间发布时间:2022-07-10
下一篇:
c#loadxml中文报错发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap