【众所周知】(不知道当我没说)git中使用二分可以快速定位到最初出现某个问题的位置
二分查找
/**
* 二分查找函数
*
* @param {number} target - 目标值
* @param {string | any[]} arr - 查找数组,支持字符串和数字类型
* @returns {number} - 目标值在数组中的索引,如果不存在则返回 -1
*/
function binarySearch(target,arr) {
var start = 0;
var end = arr.length-1;
while (start<=end){
var mid = parseInt(start+(end-start)/2);
console.log(mid)
if (target === arr[mid]) {
return mid;
} else if( target > arr[mid]) {
start = mid+1;
} else {
end = mid-1;
}
}
return -1;
}
// test this
binarySearch(6, [5,6,7])
// 1
单元测试
## Test Class: BinarySearchTest
```typescript
describe('binarySearch', () => {
it('should return the index of the target element when found', () => {
const arr: any[] = [1, 2, 3, 4, 5];
const target = 3;
const result = binarySearch(target, arr);
expect(result).toBe(2);
});
it('should return -1 when the target element is not found in the array', () => {
const arr: any[] = [1, 2, 3, 4, 5];
const target = 6;
const result = binarySearch(target, arr);
expect(result).toBe(-1);
});
it('should return -1 when the target element is an empty array', () => {
const arr: any[] = [];
const target = 1;
const result = binarySearch(target, arr);
expect(result).toBe(-1);
});
it('should return -1 when the target element is a single element array', () => {
const arr: any[] = [1];
const target = 1;
const result = binarySearch(target, arr);
expect(result).toBe(-1);
});
it('should return -1 when the target element is a non-numeric array', () => {
const arr: any[] = ['a', 'b', 'c'];
const target = 1;
const result = binarySearch(target, arr);
expect(result).toBe(-1);
});
});
···