type
status
date
slug
summary
tags
category
icon
password
创建时间
Nov 22, 2024 02:11 AM
给你一个长度为
n 下标从 0 开始的字符串 blocks ,blocks[i] 要么是 'W' 要么是 'B' ,表示第 i 块的颜色。字符 'W' 和 'B' 分别表示白色和黑色。给你一个整数
k ,表示想要 连续 黑色块的数目。每一次操作中,你可以选择一个白色块将它 涂成 黑色块。
请你返回至少出现 一次 连续
k 个黑色块的 最少 操作次数。参考 灵茶山艾府
大写字母 "W" 和 "B" 的 ASCII 码分别是 87 和 66。它们的二进制表示如下:
- 大写字母 "W": 01010111
- 大写字母 "B": 01000010
他们的最后一位不相同,可以进行判别
问:为什么把
if-else(或者 ?: 三目运算符)写成 s[i] & 1 就会快很多?(本题数据范围小看不出区别)答:CPU 在遇到分支(条件跳转指令)时会预测代码要执行哪个分支,如果预测正确,CPU 就会继续按照预测的路径执行程序。但如果预测失败,CPU 就需要回滚之前的指令并加载正确的指令,以确保程序执行的正确性。
对于本题的数据,字符 ‘W’ 和 ‘B’ 可以认为是随机出现的,在这种情况下分支预测就会有 50% 的概率失败。失败导致的回滚和加载操作需要消耗额外的 CPU 周期,如果能用较小的代价去掉分支,对于本题的情况必然可以带来效率上的提升。
注意:这种优化方法往往会降低可读性,最好不要在业务代码中使用。