陣列有序,時間複雜度要求為
目標值的開始位置和結束位置,普通的折半查詢只能判斷目標值是否在陣列當中,在的話返回其下標,但是這裡面的陣列有重複值,所以要對折半查詢進行改造。
先查目標值的開始位置。如何定義開始位置?如果在陣列中找到目標值的位置,然後判斷它左邊位置上的數是否和目標值相等:
如果不相等,那麼此時目標值的位置就是開始位置;
查詢結束位置同理,如果在陣列中找到目標值的位置,然後判斷它右邊位置上的數是否和目標值相等,然後再重新定位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,...