leetcode刷题之或操作使用场景

文章目录

    • 概要
    • 题目
    • 问题分析
    • 小结

概要

今天晚上上床前刷了一个leetcode的题目,是leetcode的2103题,因为是个简单题,我只是想复习一下hash表的用法。结果反而让我看到了或操作的使用场景。

题目

总计有 n 个环,环的颜色可以是红、绿、蓝中的一种。这些环分别穿在 10 根编号为 0 到 9 的杆上。

给你一个长度为 2n 的字符串 rings ,表示这 n 个环在杆上的分布。rings 中每两个字符形成一个 颜色位置对 ,用于描述每个环:

  • 第 i 对中的 第一个 字符表示第 i 个环的 颜色(‘R’、‘G’、‘B’)。
  • 第 i 对中的 第二个 字符表示第 i 个环的 位置,也就是位于哪根杆上(‘0’ 到 ‘9’)。

例如,“R3G2B1” 表示:共有 n == 3 个环,红色的环在编号为 3 的杆上,绿色的环在编号为 2 的杆上,蓝色的环在编号为 1 的杆上。

找出所有集齐 全部三种颜色 环的杆,并返回这种杆的数量。
在这里插入图片描述

问题分析

这里很明显是使用hash数组完成,我写到一半,发现一个问题:如何在hash数组中记录三个不同的颜色都存在呢。我有想过把int类型的数据换成String类型,将字符’C’,‘G’,'B’存入对应的字符串中,但是这样后面就得先去重,再判断字符串长度,会提高代码的时间复杂度。后来看了其他人的答案,发现出现了一个运算符 |= 这个一开始没反应过来,上网查到,原来是或运算符,左边的数或右边的数,化成二进制进行比较,只要有一个位数为1,结果便是1。

举例:
1|2的结果
用八位2进制来表示这2个数分别为
00000001 -> 1
00000010 -> 2

或运算只要一个是1那么结果就是1

所以结果是

00000011 -> 3
到这里是不是没感觉上面奇怪的,但是,我们看一下别人是如何使用的:

class Solution {public int countPoints(String rings) {int [] hash = new int[10];for (int i = 0; i < rings.length(); i+=2) {if(rings.charAt(i) == 'R'){hash[rings.charAt(i+1)-'0'] |= 1;}if(rings.charAt(i) == 'G'){hash[rings.charAt(i+1)-'0'] |= 2;}if(rings.charAt(i) == 'B'){hash[rings.charAt(i+1)-'0'] |= 4;}}int count = 0;for (int i : hash) {if (i==7) count++;}return count;}
}

1,2,4,这三个数化成二进制在各自的位上都是1,而其他位都是0
1>001
2>010
4>100
他们之间做或操作,可以做到当出现一次1,2或4的时候,对应的特殊位置上会变成1。这样最后,如果都出现过的话,我们最终的结果就是
111>7

小结

之前我也了解或操作,但是一直没有碰到相关场景,今天见识到了,所以记录一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/470779.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑马Java——异常、File、综合案例

目录 一、异常 1、异常的分类 1.1、Error 1.2、Exception 1.3、小结 2、编译时异常和运行时异常 2.1、编译时异常 2.2、运行时异常 2.3、为什么异常要分成编译时异常和运行时异常&#xff1f; 2.4、小结&#xff08;运行时异常和编译时异常的区别&#xff09; 3、异…

c语言(指针进阶)

指针 一.什么是字符指针二.使用指针数组模拟二维数组三.函数指针 一.什么是字符指针 字符指针&#xff1a;指向字符型数据的指针变量。每个字符串在内存中都占用一段连续的存储空间&#xff0c;并有唯一确定的首地址。即将字符串的首地址赋值给字符指针&#xff0c;可让字符指针…

力扣---通配符匹配

题目描述&#xff1a; 给你一个输入字符串 (s) 和一个字符模式 (p) &#xff0c;请你实现一个支持 ? 和 * 匹配规则的通配符匹配&#xff1a; ? 可以匹配任何单个字符。 * 可以匹配任意字符序列&#xff08;包括空字符序列&#xff09;。 判定匹配成功的充要条件是&#xff…

GoJS可视化JavaScript库讲解

1.简介 GoJS是一个可视化JavaScript库&#xff0c;用于浏览器中创建交互图形&#xff0c;&#xff08;比如流程图&#xff0c;树图&#xff0c;关系图&#xff0c;力导图等等&#xff09;。允许您为用户构建各种图表&#xff0c;从简单的流程图、组织图到图表、SCADA和BPMN图表…

配置 JDK 环境变量(最简单)

前言 在通过控制台使用 javac 命令编译 &#xff0c;java 命令运行 Java 程序时&#xff0c;会出现识别不了这两个命令的情况&#xff0c;如下所示&#xff1a; 这是没有配置环境变量导致的 在控制台输入的命令&#xff0c;操作系统会去一些特定的目录中去找&#xff0c;看看是…

[职场] 面试失败的解压方式是什么 #经验分享#职场发展#知识分享

面试失败的解压方式是什么 1、心态调整&#xff1a;自我暗示、找人吐槽发泄情绪都是极佳的心态调整办法&#xff1b; 2、策略调整&#xff1a;当面对同一个岗位多次不成功的时候&#xff0c;需要我们调整策略&#xff0c;尝试去应聘相近的工作岗位&#xff1b; 3、总结提升&…

数字的魅力之情有独钟的素数

情有独钟的素数 什么是素数 素数&#xff08;Prime number&#xff09;也称为质数&#xff0c;是指在非0自然数中&#xff0c;除了1与其本身之外不拥有其他因数的自然数。也就是说&#xff0c;素数需要满足两个条件&#xff1a; 大于1的整数&#xff1b;只拥有1和其自身两个…

Vue 全组件 局部组件

一、组件定义和使用 1、全局组件 定义 <template> <div> <h1>This is a global component</h1> </div> </template> <script lang"ts"> </script> <style></style> 导入 全局组件在main.ts&#xff…

[OPEN SQL] 新增数据

INSERT语句用于数据的新增操作 本次操作使用的数据库表为SCUSTOM&#xff0c;其字段内容如下所示 航班用户(SCUSTOM) 该数据库表中的部分值如下所示 1.插入单条数据 语法格式 INSERT <dbtab> FROM <wa>. INSERT INTO <dbtab> VALUES <wa>. INSERT &…

windows vs 自己编译源码 leveldb 然后使用自己编译的文件

1 准备源码文件 1.1 第一种方法 git下载源码 vs项目中git leveldb源码和git third_party googletest-CSDN博客 1.2 第二种方法 手动下载 然后把第三方的源码下载 复制到 third_party 对应的文件夹中 没有文件夹 third_party -> powershell mkdir third_party 2 编译lev…

计算机网络——12DNS

DNS DNS的必要性 IP地址标识主机、路由器但IP地址不好记忆&#xff0c;不便于人类用使用&#xff08;没有意义&#xff09;人类一般倾向于使用一些有意义的字符串来标识Internet上的设备存在着“字符串”——IP地址的转换的必要性人类用户提供要访问机器的“字符串”名称由DN…

课时31:内容格式化_输出格式化_printf格式化

1.1.3 printf格式化 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 场景需求 虽然我们能够通过 echo的方式实现信息某种程度的格式化输出&#xff0c;但是很多信息的输出偏重于手工的干预&#xff0c;效率太慢。我们需要一种功能…