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.mzph.cn/news/683631.shtml

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

相关文章

Zabbix图形中文乱码问题(显示口口)解决办法

一 切换到zabbix安装目录assets/fonts下&#xff0c;下载字体 这里使用是nginxphp作为zabbix-web展示&#xff0c;使用find 命令查找 进入目录下&#xff0c;将原有字体备份&#xff0c;下载msyh字体 wget https://www.xxshell.com/download/sh/zabbix/ttf/msyh.ttf 二 修改配…

[GYCTF2020]Blacklist

感觉是[强网杯 2019]随便注 的加强版&#xff0c;之前做的是最后可以通过prepare和execute实现对select的绕过&#xff0c;但是这题把这两个关键字也过滤了。 前面堆叠注入没啥问题&#xff0c;卡在了最后读取flag 查看其他师傅的wp&#xff0c;发现这个handler的可以当作丐版s…

CPU-GPU异构并行化APSP算法

一、Floyd-Warshall算法 介绍 Floyd-Warshall算法&#xff08;英语&#xff1a;Floyd-Warshall algorithm&#xff09;&#xff0c;中文亦称弗洛伊德算法或佛洛依德算法&#xff0c;是解决任意两点间的最短路径的一种算法&#xff0c;可以正确处理有向图或负权&#xff08;但…

C++学习:sort快速排序

sort快速排序 1.sort(起始地址&#xff0c;结束地址的下一位&#xff0c;*比较函数)默认是< #include <iostream> #include <algorithm> // 包含排序算法需要的头文件 using namespace std;int main() {int s[1000];int n;cin >> n;for (int i 0; i &l…

奔跑吧小恐龙(Java)

前言 Google浏览器内含了一个小彩蛋当没有网络连接时&#xff0c;浏览器会弹出一个小恐龙&#xff0c;当我们点击它时游戏就会开始进行&#xff0c;大家也可以玩一下试试&#xff0c;网址&#xff1a;恐龙快跑 - 霸王龙游戏. (ur1.fun) 今天我们也可以用Java来简单的实现一下这…

FileZilla Server 1.8.1内网搭建

配置环境服务器服务器下载服务器配置服务器配置 Server - ConfigureServer Listeners - Port 协议设置 Protocols settingsFTP and FTP over TLS(FTPS) Rights management(权利管理)Users(用户) 客户端建立连接 配置环境 服务器处于局域网内: 客户端 < -访问- > 公网 &l…

[嵌入式系统-17]:RT-Thread -3- 源代码目录结构

目录 前言&#xff1a;功能模块 一、RT-Thread 源代码目录结构 二、支持的CPU架构 三、SRC内核代码 前言&#xff1a;功能模块 一、RT-Thread 源代码目录结构 从RT-Thread的GitHub官网上面下载了内核源码&#xff0c;下载链接如下 https://github.com/RT-Thread/rt-thread…

HarmonyOS 通过getInspectorByKey获取指定元素高宽等属性

例如 这里 我们有这样一个组件 Entry Component struct Dom {build() {Column() {Row() {Circle({ width: 200, height: 200 }).fill(#20101010)}.id(ES)}.width(100%).height(100%)} }这里 我们就写了个很基本的组件结构 然后 我们写了个 Circle 组件 定义了宽高 然后 如果我…

2024.02.15作业

一&#xff0e;选择题 1.变量的指针&#xff0c;其含义是指该变量的 B 。 A&#xff09;值 B&#xff09;地址 C&#xff09;名 D&#xff09;一个标志 2.已有定义int k2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k&#x…

数据接收程序

#include<reg51.h> //包含单片机寄存器的头文件 sbit pPSW^0; /***************************************************** 函数功能&#xff1a;接收一个字节数据 ***************************************************/ unsigned char Receive(void) { unsigned…

寒假作业2月14号

指针练习 1、选择题 1.1、若有下面的变量定义&#xff0c;以下语句中合法的是&#xff08; A &#xff09;。 int i&#xff0c;a[10]&#xff0c;*p&#xff1b; A&#xff09; pa2; B&#xff09; pa[5]; C&#xff09; pa[2]2; D&#xff09; p&(i…

116. 填充每个节点的下一个右侧节点指针

给定一个 完美二叉树 &#xff0c;其所有叶子节点都在同一层&#xff0c;每个父节点都有两个子节点。二叉树定义如下&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针&#xff0c;让这个指针指向其下一个右侧节点。如果找不到…

Flink理论—容错之状态

Flink理论—容错之状态 在 Flink 的框架中&#xff0c;进行有状态的计算是 Flink 最重要的特性之一。所谓的状态&#xff0c;其实指的是 Flink 程序的中间计算结果。Flink 支持了不同类型的状态&#xff0c;并且针对状态的持久化还提供了专门的机制和状态管理器。 Flink 使用…

7 大 Android 数据恢复软件,可轻松找回丢失的数据

每年&#xff0c;由于各种原因&#xff0c;数百万人从他们的 Android 设备中丢失数据。它可能像意外删除文件一样简单&#xff0c;也可能像系统崩溃一样复杂。在这种情况下&#xff0c;拥有高效的数据恢复工具可以证明是救命稻草。Mac 用户尤其需要找到与其系统兼容的软件。好消…

不止于浏览器:掌握Node.js,开启全栈开发新篇章!

介绍&#xff1a;Node.js是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;特别适合构建高性能的网络服务器和实时应用。具体介绍如下&#xff1a; 服务器端JavaScript&#xff1a;Node.js的核心优势之一是在服务器端运行JavaScript&#xff0c;这使得前端开发者可以…

如何利用SpringSecurity进行认证与授权

目录 一、SpringSecurity简介 1.1 入门Demo 二、认证 ​编辑 2.1 SpringSecurity完整流程 2.2 认证流程详解 2.3 自定义认证实现 2.3.1 数据库校验用户 2.3.2 密码加密存储 2.3.3 登录接口实现 2.3.4 认证过滤器 2.3.5 退出登录 三、授权 3.1 权限系统作用 3.2 授…

第10章 智能租房——用户中心

学习目标 掌握用户注册功能的逻辑,能够独立编写代码实现用户注册功能 掌握用户中心页展示功能的逻辑,能够实现在用户中心页上展示账号信息、收藏记录和浏览记录 掌握用户登录与退出的逻辑,能够实现用户登录与退出功能 掌握账号信息修改的逻辑,能够实现账号信息修改功能 掌握…

软件实例分享,门诊处方软件存储模板处方笺教程,个体诊所电子处方开单系统软件教程

软件实例分享&#xff0c;门诊处方软件存储模板处方笺教程&#xff0c;个体诊所电子处方开单系统软件教程、 一、前言 以下软件教程以 佳易王诊所电子处方管理软件V17.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 电子处方软件支持病历汇总…

CGAL Mesh分割

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 网格分割是将一个网格分解成更小的、有意义的子网格的过程。该过程用于建模,索具,纹理,形状检索,变形等应用。CGAL为我们提供了一个依赖于形状直径函数(SDF)的算法实现,即给定一个三角形表面网格包围一个3D实体…

B3650 [语言月赛202208] 求和

题目描述 输入一个整数 n(1≤n≤107)&#xff0c;每行输出一个数&#xff0c;表示数字 1 到 i 的和。 比如&#xff0c;当 n5 时&#xff0c; 第 1 行输出一个数字 1&#xff1b; 第 2 行输出数字 3&#xff0c;因为 1 2 3&#xff1b; 第 3 行输出数字 6&#xff0c;因…