刷题-在排序数组中找到重复数

Posted on 2022-02-05 23:38  AcTourist  阅读(127)  评论(0)    收藏  举报

一、题目要求

 

 

二、重点难点分析

  1.暴力拆解:直接设置一个n=0;然后for循环nums.length,当n==target时就n++,就输出,如果没有就输出n=0

  2.既然输入的数组是排序的,那么我们就能很自然地想到用二分法查找算法。题目要就统计数字k在排序数组中出现的次数。二分法查找算法总是先拿数组中间的数字和k比较,如果中间数字比k大,那么k只有可能出现在数组的前半段,下一轮我们只在数组的前半段查找就可以了;如果中间的数字比k小,那么k只有可能出现在数组的后半段,下一轮我们只在数组的后半段查找就可以了。

三、代码展示

 1 /**
 2  * @param {number[]} nums
 3  * @param {number} target
 4  * @return {number}
 5  */
 6 var search = function(nums, target) {
 7     let left = null;
 8     let right = null;
 9     let i = 0;
10     let j = nums.length;
11     // 查找右边界
12     while( i<=j ){
13         let mid = Math.floor((i+j)/2);
14         if( nums[mid] <= target ){
15             i = mid +1;
16         }else{
17             j = mid -1;
18         }
19     }
20     right = i;
21     i = 0;
22     j = nums.length-1;
23     // 查找左边界
24     while( i<=j ){
25          let mid = Math.floor((i+j)/2);
26         if( nums[mid] < target ){
27             i = mid +1;
28         }else{
29             j = mid -1;
30         }
31     }
32     left = j;
33     return right-left-1;
34 };