写点什么

【LeetCode】在排序数组中查找数字 Java 题解

用户头像
HQ数字卡
关注
发布于: 8 小时前

题目描述

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


示例 1:
输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:
输入: nums = [5,7,7,8,8,10], target = 6输出: 0
限制:
0 <= 数组长度 <= 50000


来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码

思路分析

  • 这个题目题意容易理解,有多种解法。可以用朴素解法,二分解法等多种方法解答。

代码

  • 朴素解法


    public int search(int[] nums, int target) {        int ans = 0;        for (int num : nums) {            if (num == target) {                ans++;            }        }
return ans; }
复制代码


  • 二分解法


public int search(int[] nums, int target) {            int ans = 0;            int left = 0;            int n = nums.length;            int right = n - 1;            int idx = -1;
while (left < right) { int mid = left + (right - left) / 2; if (nums[mid] == target) { idx = mid; break; } else if (nums[mid] < target) { left = mid + 1; } else { right = mid - 1; } } if (idx > -1) { for (int i = idx - 1; i >= 0; i--) { if (nums[idx] != target) { break; } else { ans++; } }
for (int i = idx ; i < n; i++) { if (nums[idx] != target) { break; } else { ans++; } } }
return ans; }
复制代码


  • stream 解法


    public int search(int[] nums, int target) {        return (int) Arrays.stream(nums).filter(num -> (num == target)).count();    }
复制代码

总结

  • 朴素解法的时间复杂度是 O(n), 空间复杂度是 O(1)

  • 二分解法的时间复杂度是 O(log(n)), 空间复杂度是 O(1)

  • stream 解法的时间复杂度是 O(n), 空间复杂度是 O(1)

  • 坚持每日一题,加油!

发布于: 8 小时前阅读数: 2
用户头像

HQ数字卡

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】在排序数组中查找数字 Java题解