// 数值算法
// 二分查找 half seaarch,O(n)
function half(nums, target) {
const len = nums.length
let left = 0, right = len - 1
while(left < right) {
const mid = left + ((right - left) >> 1);
if(nums[mid] > target) {
right = mid
} else if(nums[mid] < target) {
left = mid + 1
} else {
return mid
}
}
return -1
}
// console.log(half([1,3,5,6,7], 5))
// 原地删除指定元素 (双指针),O(n)
function del(nums, el) {
let slow = 0, fast = 0
for(let fast = 0; fast < nums.length; fast++) {
if(nums[fast] !== el) {
nums[slow++] = nums[fast]
}
}
return slow
}
// console.log(del([3,5,3,5,6], 3))
// 有序数组的平方 (双指针),O(n)
function sort(nums) {
const len = nums.length
let i = 0, j = len -1, k = len -1
let res= []
while(i <= j) {
if(nums[i] * nums[i] >= nums[j] * nums[j]) {
res[k--] = nums[i] * nums[i]
i++
}
if(nums[i] * nums[i] < nums[j] * nums[j]) {
res[k--] = nums[j] * nums[j]
j--
}
}
return res
}
// console.log(sort([-3,-1,0,3,5,6]))
// 长度最小的子数组(滑动窗口)
function slide(nums, s) {
const len = nums.length
let i = 0, sum = 0, res = len
for(let j = 0; j < len; j++) {
sum += nums[j]
while(sum >= s) {
const sublen = j- i + 1
res = res > sublen ? sublen : res
sum -= nums[i++]
}
}
return res
}
// console.log(slide([3,1,0,3,5,7], 13))
console