*先说现象:
在一个整形数组,
使用二分法找大于整数k的第一个数时,可以用k+0.5来找
同理找等于整数k的第一个数时,可以用k-0.5来找
其实很好理解,二分法找的是插入这个数字的位置,如果这个数字存在,对于他插入到相同数字序列中的哪个位置是不可预知的。
而取在数的中间,得到的值,是这个数应该存在的位置,而占住这个位置的数以及其之后的数应该往后移(因为数组没有这个数字k+0.5或者k-0.5,所以不用考虑相同数字序列中的位置)。
*结论:
二分查找时,要找某个位置,可以用某个位于单位之间的数进行二分查找,这样就可以找到此数如果存在,应存在的位置。
NK网上面的题
统计一个数字在排序数组中出现的次数。
public int GetNumberOfK(int [] array , int k){
}
答案
看见有序,就知道是二分查找了
因为是整形数组,所以就可以借用上面的方法
public class Solution {
int GetNumberOfK(int[] data ,int k) {
return biSearch(data

本文探讨了如何利用二分查找在有序整数数组中找到特定数字出现的位置。通过使用k+0.5或k-0.5作为查找值,可以有效地确定目标数字出现的起始位置,从而统计其出现次数。这种方法适用于解决 NK 网站上的类似问题。
最低0.47元/天 解锁文章
1049

被折叠的 条评论
为什么被折叠?



