var start = 0; var end = nums.length - 1; // 初始條件 var mid = 0; while(start <= end) { // 循環條件 mid2 = Math.floor((start + end) / 2); // 取整方式 if (target > nums[mid]) { // 判斷條件 start = mid + 1 // 判斷條件 } else if (target < nums[mid]) { // 判斷條件 end = mid - 1 // 判斷條件 } else { // 判斷條件 return mid //判斷條件 } } return -1 //收尾
條件\區間 | ( )開區間 | (] 左開右閉 | [) 左閉右開 | [] 閉區間 | |||
任意一點 | 任意一點 | 任意一點 | 任意一點 | 最左的點 | 最右的點 | ||
初始條件 | start | -1 spa |
-1code |
0 blog |
0 get |
||
end | nums.lengthtable |
nums.length-1class |
nums.length循環 |
nums.length-1tab |
|||
循環條件 | start < end - 1 di |
start < end while |
start < end |
start <= end |
start < end |
start < end |
|
最後一次循環 | (a,b,c) |
(a,b] |
[a,b) |
[a] |
[a,b] |
[a,b] |
|
取整方式 | 向上/向下 | 向上 | 向下 |
向上/向下 | 向下 | 向上 | |
判斷條件 | target > nums[mid] |
start = mid |
start = mid |
start = mid+1 |
start = mid+1 |
start = mid+1 |
start = mid |
target === nums[mid] |
return mid |
return mid |
return mid |
return mid |
end = mid |
||
target < nums[mid] |
end = mid |
end = mid-1 |
end = mid |
end = mid-1 |
end = mid-1 |
||
收尾retrun | -1 |
-1 | -1 | -1 | nums[end] === target ? end : -1 或 nums[start] === target ? start : -1 |