描述
給一個(gè)升序數(shù)組,找到target最后一次出現(xiàn)的位置嫉你,如果沒(méi)出現(xiàn)過(guò)返回-1
樣例
給出 [1, 2, 2, 4, 5, 5].
target = 2, 返回 2.
target = 5, 返回 5.
target = 6, 返回 -1.
代碼
public class Solution {
public int lastPosition(int[] nums, int target) {
if (nums == null || nums.length == 0) {
return -1;
}
int start = 0;
int end = nums.length - 1;
while (start < end -1) {
int mid = start + (end - start) / 2;
if (nums[mid] == target) {
start = mid;
/* 此處只能用start,不能換成end,因?yàn)轭}目要求尋找last position骑丸,
* 所以找到了target后還應(yīng)該判斷下后面位置還有沒(méi)有相同的target數(shù)
*/
}
if (nums[mid] > target) {
end = mid;
}
if (nums[mid] < target) {
start = mid;
}
}
if (nums[end] == target) {
return end;
}
if (nums[start] == target) {
return start;
}
return -1;
}
}
經(jīng)典的二分法模板夭咬,不斷縮小范圍着绊,最后將范圍鎖定在start和end兩個(gè)數(shù)上,最后通過(guò)條件判斷語(yǔ)句來(lái)確定想要的值又沾。具體細(xì)節(jié)比如注釋地方要根據(jù)題目進(jìn)行修改弊仪,若找第一個(gè)數(shù)就應(yīng)該用令end = mid