咒语和药水的成功对数

Bernie


Bernie
2300. 咒语和药水的成功对数
思路:
1.先计算出数组的总和 sum,然后定义一个变量 leftValue 为 0,然后循环遍历数组,每次循环将当前值赋值给 rightValue,然后判断 leftValue 是否等于 rightValue,如果相等,则返回当前下标,如果不相等,则将 leftValue 加上当前值,然后继续循环,最后返回 -1 即可。
typescript 解法
function successfulPairs(
spells: number[],
potions: number[],
success: number
): number[] {
let ret: number[] = [];
potions.sort((pre: number, next: number) => pre - next);
for (let i = 0; i < spells.length; i++) {
let left: number = 0;
let right: number = potions.length;
while (left < right) {
const mid: number = left + Math.floor((right - left) / 2);
const value = spells[i] * potions[mid];
if (value < success) {
left = mid + 1;
} else {
right = mid;
}
}
ret.push(potions.length - right);
}
return ret;
}
go 解法
func successfulPairs(spells []int, potions []int, success int64) []int {
ret := make([]int, 0)
sort.Ints(potions)
potionsLen := len(potions)
for i := 0; i < len(spells); i ++ {
left := 0
right := potionsLen
currentSpell := spells[i]
for left < right {
mid := left + (right - left) / 2
value := int64(currentSpell * potions[mid])
if value < success {
left = mid + 1
} else {
right = mid
}
}
ret = append(ret, potionsLen - right)
}
return ret
}