二分搜尋演算法的三種情況
推薦部落格,真的寫的非常好!!!
1、當陣列中沒有重複元素時:
publicint binarysearchimplement(int array, int
target)
else
if (array[mid] >target)
else
}if (flag) return
index;
else
return -1;
}
2、當陣列中有重複元素,尋找左邊界
publicint binarysearch_leftbound(int array, int
target)
else
if (array[mid] if (array[mid] >target)
}if (start == array.length) return -1;
return array[start] == target? start: -1; //
start = end,也可以寫成return end
}
3、當陣列中有重複元素,尋找右邊界
publicint binarysearch_rightbound(int array, int
target) else
if (array[mid] if (array[mid] >target)
}if (start == 0) return -1;
return array[start-1] == target? (start-1): -1;
}
import org.junit.test;public class nc105 ;
int target = 2;
system.out.println(search_3(nums, target));
}// 當陣列中無重複元素
public int search(int nums, int target) else if (nums[mid] < target) else if (nums[mid] > target)
}return nums[left] == target? left: -1; // 這裡加一下對left的判斷
}// 當陣列中無重複元素
public int search_1(int nums, int target) else if (nums[mid] < target) else if (nums[mid] > target)
}return -1;
}// 當陣列中有重複元素,尋找左邊界
public int search_2(int nums, int target) else if (nums[mid] > target) else if (nums[mid] == target)
}if (left == nums.length) return -1; // 沒有找到
return nums[left] == target? right: -1; // 這兩個語句的順序不能亂 否則陣列越界
}// 當陣列中有重複元素,尋找右邊界
public int search_3(int nums, int target) else if (nums[mid] > target) else if (nums[mid] == target)
}if (right == 0) return -1;
return nums[right-1] == target? left-1: -1;
}}
演算法基礎 二分查詢函式 二分演算法
一 寫乙個函式binaryseach,在包含size個元素的 從小到大排序的int數a裡查詢元素p,如果找到,則返回元素下標,如果找不到,則返回 1。要求複雜度o log n int binarysearch int a,int size,int p return 1 複雜度o log n 二 寫乙...
poj 1759 二分搜線性
題意 有n個燈泡,每個燈泡距離地面高度為hi,現在給了第乙個燈泡的高度a。求最後乙個燈泡的高度b的最大值。解析 這題剛看這怎麼能二分啊.其實是第二個燈泡和最後的高度b是成正相關的,所以去二分猜測第二個燈泡的高度。若第二個燈泡的高度能讓之後的每乙個燈泡高度都大於0,則這個高度是ok的,可以繼續增大。i...
POJ 2110 二分 暴搜
題意 給你乙個矩陣 你能往各個方向走 不走出去就行 每次只能上下左右走一格,問路徑上的點權最大值和最小值的差最小是多少。思路 首先 二分最後的答案,暴力列舉當前的區間是啥。dfs 就ok 了 我的 可能有點兒小問題 列舉的時候沒有判左上角的點 但是ac了哈哈哈 by siriusren includ...