首页 > 其他分享 >[LeetCode] 2222. Number of Ways to Select Buildings

[LeetCode] 2222. Number of Ways to Select Buildings

时间:2023-07-19 12:44:25浏览次数:44  
标签:forms Buildings Ways 2222 buildings 010 001101 101 多少

You are given a 0-indexed binary string s which represents the types of buildings along a street where:

  • s[i] = '0' denotes that the ith building is an office and
  • s[i] = '1' denotes that the ith building is a restaurant.

As a city official, you would like to select 3 buildings for random inspection. However, to ensure variety, no two consecutive buildings out of the selected buildings can be of the same type.

  • For example, given s = "001101", we cannot select the 1st3rd, and 5th buildings as that would form "011" which is not allowed due to having two consecutive buildings of the same type.

Return the number of valid ways to select 3 buildings. 

Example 1:

Input: s = "001101"
Output: 6
Explanation: 
The following sets of indices selected are valid:
- [0,2,4] from "001101" forms "010"
- [0,3,4] from "001101" forms "010"
- [1,2,4] from "001101" forms "010"
- [1,3,4] from "001101" forms "010"
- [2,4,5] from "001101" forms "101"
- [3,4,5] from "001101" forms "101"
No other selection is valid. Thus, there are 6 total ways.

Example 2:

Input: s = "11100"
Output: 0
Explanation: It can be shown that there are no valid selections.

Constraints:

  • 3 <= s.length <= 105
  • s[i] is either '0' or '1'.

选择建筑的方案数。

给你一个下标从 0 开始的二进制字符串 s ,它表示一条街沿途的建筑类型,其中:

s[i] = '0' 表示第 i 栋建筑是一栋办公楼,
s[i] = '1' 表示第 i 栋建筑是一间餐厅。
作为市政厅的官员,你需要随机 选择 3 栋建筑。然而,为了确保多样性,选出来的 3 栋建筑 相邻 的两栋不能是同一类型。

比方说,给你 s = "001101" ,我们不能选择第 1 ,3 和 5 栋建筑,因为得到的子序列是 "011" ,有相邻两栋建筑是同一类型,所以 不合 题意。
请你返回可以选择 3 栋建筑的 有效方案数 。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/number-of-ways-to-select-buildings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路是动态规划。把题意精简一下,其实题目是让你求 input 字符串里有多少类型为 101 或者 010 这样的子序列。这里我选择用几个变量记录 0,1,10,01 的出现次数。遍历字符串,当我们遇到的是 0,我们除了要统计 0 的个数之外,我们要看看之前我们统计了多少个 01,这样我们就知道有多少 010 可以被累加到最后的结果。同理,如果我们遇到的是 1,除了要统计 1 的出现次数以外,我们也要统计之前出现的 10 的次数,这样我们就知道有多少 101 可以被累加到最后的结果。

时间O(n)

空间O(1)

Java实现

 1 class Solution {
 2     public long numberOfWays(String s) {
 3         long res = 0, one = 0, zero = 0, oneZero = 0, zeroOne = 0;
 4         for (int i = 0; i < s.length(); i++) {
 5             char c = s.charAt(i);
 6             // 如果当前是0
 7             if (c == '0') {
 8                 zero++;
 9                 oneZero += one;        // 看看10这种前缀有多少,也就是看看目前找到的1有多少
10                 res += zeroOne;        // 看看01这种前缀有多少,也就是看看010这种答案有多少
11             }
12             // 如果当前是1
13             else {
14                 one++;
15                 zeroOne += zero;    // 看看01这种前缀有多少,也就是看看目前找到的0有多少
16                 res += oneZero;        // 看看10这种前缀有多少,也就是看看101这种答案有多少
17             }
18         }
19         return res;
20     }
21 }

 

LeetCode 题目总结

标签:forms,Buildings,Ways,2222,buildings,010,001101,101,多少
From: https://www.cnblogs.com/cnoodle/p/17565272.html

相关文章

  • SQL Sever AlwaysOn的数据同步原理
    1.SQLServerAlwaysOn数据同步基本工作AlwaysOn副本同步需要完成三件事:1.把主副本上发生的数据变化记录下来。2.把这些记录传输到各个辅助副本。3.把数据变化在辅助副本上同样完成一遍。这3件工作主要由以下4个线程完成LogWriter线程:当任何一个SQL用户提交一个数据修改事务......
  • 222222222222
    importtorchfromtorchimportnnimportnumpyasnpimportmatplotlib.pyplotaspltfromPILimportImagefromtorchvisionimporttransformsfrommathimportsqrtimportosimporttorchvision.utilsasvutilsos.environ["KMP_DUPLICATE_LIB_OK"]=&......
  • UVA12222 Mountain Road 山路 题解 dp
    UVA12222山路题意:--一个山路只有一条车道,因此不能有两辆方向相反的车同时在车道内。同时,为了保证安全,车道内不能超车,且同向行驶的车间距必须大于10分钟。现在给你n辆车,三个参数依次表示行驶方向,到达时刻,行驶时间。问如何安排能使最后一个通过的车通过时的时刻最小,输出这个值......
  • How many ways of selecting/referring to a column in data.table?
    Loaddemodatalibrary(data.table)flights=fread("https://raw.githubusercontent.com/Rdatatable/data.table/master/vignettes/flights14.csv")flightsSelectonesinglecolumnSupposeIwanttoselectthefirstcolumnyear.flights[,1]#retu......
  • 特定情况下docker run --restart=always重启失效的情况
    这是原cicd中使用的语句 在服务器reboot之后,可以看到服务没有随之重启。 通过dockerps-a--no-trunc可以看到--restart=always被当成arg放在了作为entry-point的脚本后面作为传参 这里做了一个猜想,将--restart=always置于dockerrun正后方,而非镜像名后,修改如下:......
  • ARN [main-SendThread(db99:2222)] zookeeper.ClientCnxn: Session 0x0 for server n
    1.2014-07-2117:24:36,310WARN [main-SendThread(db99:2222)]zookeeper.ClientCnxn:Session0x0forservernull,unexpectederror,closingsocketconnectionandattemptingreconnectjava.net.ConnectException:拒绝连接     ......
  • 算法刷题记录:NC22227 约瑟夫环
    题目链接https://ac.nowcoder.com/acm/problem/22227解题思路模拟环。这道题顺序数就行,顺序是逆时针,逆时针的箭头是往左拐的,变成直线后趋于正半轴所以是+。不过,这道模拟环并没有说从idx号开始,往左/右数几个人,所以不需要考虑+或-。因为不会越界,所以也不用额外%n。AC代码......
  • Google Earth Engine(GEE)——全球建筑物数据集(MSBuildings数据集)包含微软7.77忆建筑物
    全球ML建筑脚印必应地图正在发布全球范围内的公开建筑脚印。我们从2014年至2021年的Bing地图图像中检测到777M的建筑,包括Maxar和Airbus的图像。为了完整起见,早期发布的数据集也包括在这个数据集中,并被纳入其中。你可以在这里找到Githubrepo和关于方法的更多信息。数据集是压缩的,......
  • Vue项目报错: Component name “xxx“ should always be multi-word vue/multi-word-co
    报错的意思是组件名应该始终是多单词,不应该以单个单词命名组件解决办法1:修改组件名称:例如当前的登陆组件名是login.vue修改成LoginName.vue,组件名需要以驼峰式命名至少两个单词,不一定都得是LoginName.vue可以是NameLogin.vue也可以是LoginNiu.vue总之就是以驼峰式命名......
  • Component name "tag" should always be multi-word.
    Componentname"tag"shouldalwaysbemulti-word.这种错误通常是由于编码规范或代码风格指南中的命名规范没有被遵守所导致的。vue中,我命名一个组件叫tag好像不符合规范,应该怎么命名?在Vue中,如果你要命名一个组件,可以采用驼峰式命名法,即使用多个单词组成的名称,每个单词的首......