二分搜素演算法

2022-07-01 11:27:11 字數 1855 閱讀 5065

二分搜尋演算法的三種情況

推薦部落格,真的寫的非常好!!!

1、當陣列中沒有重複元素時:

public

int binarysearchimplement(int array, int

target)

else

if (array[mid] >target)

else

}if (flag) return

index;

else

return -1;

}

2、當陣列中有重複元素,尋找左邊界

public

int 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、當陣列中有重複元素,尋找右邊界

public

int 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...