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 周期,如果能用较小的代价去掉分支,对于本题的情况必然可以带来效率上的提升。
注意:这种优化方法往往会降低可读性,最好不要在业务代码中使用。