Blog.

咒语和药水的成功对数

Cover Image for 咒语和药水的成功对数
Bernie
Bernie

2300. 咒语和药水的成功对数

leetcode 链接

思路:

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
}