zoukankan      html  css  js  c++  java
  • 剑指 Offer 53

    题意

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

    思路

    • 1️⃣设置哈希表来记住每个数字的出现个数,最后检查即可。但是这个没有利用题目说的数组本身已经有序这个特点。
    • 2️⃣其实数组是排序好的这个关键信息是很好的提示——使用二分来确定这个数字的索引上下界,最后相减就知道一共有几个了

    代码(哈希表)

    class Solution {
    public:
        int search(vector<int>& nums, int target) {
            unordered_map<int, int> table;
            for(auto num: nums) {
                table[num]++;
            }
            if(table.count(target) == 0) {
                return 0;
            }else {
                return table[target];
            }
            return table[target];
        }
    };
    

    代码(二分)

    class Solution {
    public:
        int find_low(vector<int>& nums, int target) {
            int left = 0, right = nums.size() - 1;
            while(left < right) {
                int mid = left + (right - left) / 2;
                if(nums[mid] < target) {
                    left = mid + 1;
                }else {
                    right = mid;
                }
            }
            if(nums[left] == target) {
                return left;
            }else {
                return -1;
            }
        }//二分找下界
        int find_high(vector<int>& nums, int target) {
            int left = 0, right = nums.size() - 1;
            while(left < right) {
                int mid = left + (right - left) + 1 / 2;
                if(nums[mid] > target) {
                    right = mid - 1;
                }else {
                    left = mid;
                }
            }
            if(nums[left] == target) {
                return left;
            }else {
                return -1;
            }
        }//二分找上界
        int search(vector<int>& nums, int target) {
            if(nums.size() == 0) {
                return 0;
            }
            int cur1 = find_low(nums, target);
            int cur2 = find_high(nums, target);
            if(cur1 == -1) {
                return 0;
            }else {
                return cur2 - cur1 + 1;
            }
            return -1;
        }
    };
    
    如有转载,请注明出处QAQ
  • 相关阅读:
    浅析ES6中的iterator
    nodejs中的异步回调机制
    用好js与nodejs中的try...catch
    vscode设置html默认浏览器
    nodejs中相互引用(循环引用)的模块分析
    ES6—带默认值的函数参数及其作用域
    函数声明与函数表达式的区别
    let块级引起的闭包思考
    进程与线程
    angular(^4)-监控表格按键行为的问题
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/14397068.html
Copyright © 2011-2022 走看看