在排序陣列中查詢元素的第乙個和最後乙個位置

2021-09-07 14:40:38 字數 1043 閱讀 9374

陣列有序,時間複雜度要求為

目標值的開始位置和結束位置,普通的折半查詢只能判斷目標值是否在陣列當中,在的話返回其下標,但是這裡面的陣列有重複值,所以要對折半查詢進行改造。

先查目標值的開始位置。如何定義開始位置?如果在陣列中找到目標值的位置,然後判斷它左邊位置上的數是否和目標值相等:

如果不相等,那麼此時目標值的位置就是開始位置;

查詢結束位置同理,如果在陣列中找到目標值的位置,然後判斷它右邊位置上的數是否和目標值相等,然後再重新定位low即可。

所以,需要進行兩次折半查詢,第一次找開始位置,第二次找結束位置。

class solution 

while (low <= high)else

}high = mid - 1;

}else if (nums[mid] > target)else

}low = 0;

high = length - 1;

while (low <= high)else

}low = mid + 1;

}else if (nums[mid] > target)else

}result[0] = start;

result[1] = end;

return result;}}

public class solution else if (array[mid] > k || array[mid] == k)else 

}low = a == -1 ? 0 : a;

high = array.length - 1;

//2.查詢右邊的位置

while (low <= high)else if (array[mid] < k || array[mid] == k)else

}return b - a < 0 ? 0 : b - a + 1;}}

034在排序陣列中查詢元素的第乙個和最後乙個

1 include 000庫函式.h 2 3 使用二分法查詢到目標值的位置,然後分兩邊再查詢出起始位置和終止位置4 16ms 不是嚴格意義上的logn的複雜度 5class solution 9int i 0,j nums.size 1 10 int m 1 11 while i j 17if nu...

PHP 在排序陣列中查詢元素的第乙個和最後乙個位置

給定乙個按照公升序排列的整數陣列 nums,和乙個目標值 target。找出給定目標值在陣列中的開始位置和結束位置。你的演算法時間複雜度必須是 o log n 級別。如果陣列中不存在目標值,返回 1,1 示例 1 輸入 nums 5,7,7,8,8,10 target 8 輸出 3,4 示例 2 輸...

34 在排序陣列中查詢元素的第乙個和最後乙個位置

給定乙個按照公升序排列的整數陣列nums,和乙個目標值target。找出給定目標值在陣列中的開始位置和結束位置。你的演算法時間複雜度必須是o log n 級別。如果陣列中不存在目標值,返回 1,1 輸入 nums 5,7,7,8,8,10 target 8 輸出 3,4 輸入 nums 5,7,7,...