js解leetcode(64)-中等

1.镜面反射

题目:

有一个特殊的正方形房间,每面墙上都有一面镜子。除西南角以外,每个角落都放有一个接受器,编号为 0, 1,以及 2。

正方形房间的墙壁长度为 p,一束激光从西南角射出,首先会与东墙相遇,入射点到接收器 0 的距离为 q 。

返回光线最先遇到的接收器的编号(保证光线最终会遇到一个接收器)。

思路:将光纤经过的水平距离和垂直距离分开看,水平方向上每走p,垂直方向上就会走q。所以假设走了水平方向走了mq之后,遇到接收器,此时垂直方向是走了mq,且mq会被p整除。

此时有两个变量需要计算。m如果是偶数,那么接收器在左边。mq/p如果是偶数,接收器会在下面。所以根据这两个计算即可。

换个角度,求出p和q的最小公倍数即可

时间复杂度O(m),空间复杂度O(1)

/**
 * @param {number} p
 * @param {number} q
 * @return {number}
 */
var mirrorReflection = function(p, q) {
  let d = 1;
  let h = q;
  while (h % p) {
    d++;
    h += q;
  }
  if ((h / p) % 2) {
    return d % 2 ? 1 : 2;
  } else {
    return 0;
  }
};

2.翻转矩阵后的得分

题目:

有一个二维矩阵 A 其中每个元素的值为 0 或 1 。

移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0。

在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和。

返回尽可能高的分数。

思路:因为是行或者列翻转,用dp1和dp2记录每一行和每一列的翻转次数,

对于第一列,肯定是全部是1时得分最多;后续每一列,就是得将0和1出现的次数分别记录,如果1的数量不小于0的数量,这一列不翻转,否则这一列翻

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值