• 剑指 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
  • 相关阅读:
    Alpha 冲刺 (8/10)
    Alpha 冲刺 (7/10)
    Alpha 冲刺 (6/10)
    团队作业-随堂小测(同学录)
    Alpha 冲刺 (5/10)
    LeetCode-1
    c++向量
    软件工程实践总结作业
    个人作业——软件产品案例分析
    个人技术博客Alpha----Android Studio学习
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/14397068.html
Copyright © 2020-2023  润新知