lc137. 只出现一次的数字 II

 

数组排序,既和前不一样又和后不一样的就是唯一的一个

    public static int numberOnce(int[] nums) {Arrays.sort(nums);if (nums.length > 2 && nums[0] != nums[1]) {//避免只有一个元素的数组return nums[0];}if (nums.length > 2 && nums[nums.length - 2] != nums[nums.length - 1]) {return nums[nums.length - 1];}for (int i = 1; i < nums.length - 1; i++) {if (nums[i] != nums[i - 1] && nums[i] != nums[i + 1]) {return nums[i];}}return nums[0];//只有一个元素的数组}

哈希表

位运算 

 

只有一个数出现了一次,其他数都出现了三次,那么别的数的每个二进制位加起来的和除3一定为0。

所以如果某个二进制位取余3不为0那么这个数就是所要求的答案的某个二进制位,再把它导出来加起来就得到答案。

 力扣每日一题:137. 只出现一次的数字 II(C++) - 知乎 (zhihu.com)

一些符号解释

(num >> i) & 1是将num左移i位进行按位与,即为保留num的第i位,其余位置零

如果num的第i位为0,则(num >> i) & 1的值为0,否则不为0

|=  按位或赋值运算符

按位或赋值运算符使用两个操作数的二进制表示,对它们执行按位或运算并将结果分配给变量

x |= y // x = x | y

与运算:针对补码进行运算 

 

    public int singleNumber(int[] nums) {int ans = 0;for (int i = 0; i < 32; ++i) {int total = 0;for (int num: nums) {//将每个二进制位加一起total += ((num >> i) & 1);//保留num的第i位,其余位为0,对于每个元素的第i位进行相加}if (total % 3 != 0) {//是否整除3,即为是否是所求的数ans |= (1 << i);//1 << i表示将1左移i位//ans = ans | (1 << i) 将二进制还原为十进制数}}return ans;}

 

代码

import org.junit.Test;
import java.util.Arrays;public class NumberOnce {@Testpublic void test() {int[] nums = new int[]{2, 2, 3, 2};System.out.println(numberOnce(nums));int[] nums1 = new int[]{0,1,0,1,0,1,99};System.out.println(numberOnce(nums1));System.out.println(singleNumber(nums1));}public static int numberOnce(int[] nums) {Arrays.sort(nums);if (nums.length > 2 && nums[0] != nums[1]) {//避免只有一个元素的数组return nums[0];}if (nums.length > 2 && nums[nums.length - 2] != nums[nums.length - 1]) {return nums[nums.length - 1];}for (int i = 1; i < nums.length - 1; i++) {if (nums[i] != nums[i - 1] && nums[i] != nums[i + 1]) {return nums[i];}}return nums[0];//只有一个元素的数组}public int singleNumber(int[] nums) {int ans = 0;for (int i = 0; i < 32; ++i) {int total = 0;for (int num: nums) {//将每个二进制位加一起total += ((num >> i) & 1);//保留num的第i位,其余位为0,对于每个元素的第i位进行相加}if (total % 3 != 0) {//是否整除3,即为是否是所求的数ans |= (1 << i);//1 << i表示将1左移i位//ans = ans | (1 << i) 将二进制还原为十进制数}}return ans;}}

 

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

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

相关文章

PPTP应用案例:让你的网络不再受限

嗨&#xff0c;小伙伴们&#xff0c;作为一家专业的PPTP代理供应商&#xff0c;我们深知网络安全对于每个人的重要性。今天&#xff0c;我将与大家分享一些关于PPTP的应用案例&#xff0c;借此帮助大家更好地了解PPTP的实际应用和专业性。无论你是在公共Wi-Fi上冲浪&#xff0c…

使用MyBatis操作数据库

hi,大家好,今天为大家带来MyBatis操作数据库的知识 文章目录 &#x1f437;1.根据MyBatis操作数据库&#x1f9ca;1.1查询操作&#x1f347;1.1.1无参查询&#x1f347;1.1.2有参查询 &#x1f9ca;1.2删除操作&#x1f9ca;1.3修改操作&#x1f9ca;1.4增加操作&#x1f9ca;…

Windows 安装 pandoc 将 jupyter 导出 pdf 文件

Windows 安装 pandoc 将 jupyter 导出 pdf 文件 1. 下载 pandoc 安装文件2. 安装 pandoc3. 安装 nbconvert4. 使用 pandoc 1. 下载 pandoc 安装文件 访问 https://github.com/jgm/pandoc/releases&#xff0c;下载最新版安装文件&#xff0c;例如&#xff0c;3.1.6.1 版&#…

【Redis面试题整理一】

一、Redis定义 Redis 是一种基于内存的数据库&#xff0c;对数据的读写操作都是在内存中完成&#xff0c;读写速度非常快&#xff0c;被广泛应用于缓存方向。并且&#xff0c;Redis 存储的是 KV 键值对数据。 二、Redis为什么不存在并发竞争 对数据类型的操作都是原子性的&a…

spring-boot webservice的例子

webservice发布服务 源码下载地址 spring-boot-webservice例子资源-CSDN文库 webservice cilent调用 源码下载地址 spring-boot-clintwebservice调用服务的例子资源-CSDN文库

jackson自定义序列化反序列化

jackson自定义序列化和反序列化 自定义序列化 序列化主要作用在返回数据的时候以BigDecimal统一返回3位小数为例自定义序列化处理类继承jackson的JsonSerializer类&#xff0c;重写serialize方法 /*** author liouwb*/ public class BigDecimalSerializer extends JsonSeria…

Web安全——Burp Suite基础上

Burp Suite基础 一、Burp Suite安装和环境配置如何命令行启动Burp Suite 二、Burp Suite代理和浏览器设置FireFox设置 三、如何使用Burp Suite代理1、Burp Proxy基本使用2、数据拦截与控制3、可选项配置Options客户端请求消息拦截服务器端返回消息拦截服务器返回消息修改正则表…

面试题更新之-this指向问题

文章目录 this指向是什么常见情况下 this 的指向怎么修改this的指向 this指向是什么 JavaScript 中的 this 关键字用于引用当前执行代码的对象。它的指向是动态的&#xff0c;根据执行上下文的不同而变化。 常见情况下 this 的指向 全局作用域中的 this&#xff1a; 在全局作…

内网横向移动—WinLinux内存离线读取Hashcat破解RDPSSH存储提取

内网横向移动—Win&Linux&内存离线读取&Hashcat破解&RDP&SSH存储提取 1. 前言2. Windows系统密码提取2.1. 在线读取2.2. 离线读取2.2.1. 无存储读取2.2.1.1. 读取文件2.2.1.2. 本地解密 2.2.2. 有存储读取 2.3. 解决高版本2.3.1. 修改注册表2.3.2. 重新登陆…

分布式Redis详解

目录 前言安装redis的俩种方法Redis 与 MySQL的区别Redis可以实现那些功能Redis常用的数据类型有序列表的底层是如何实现的?什么是跳跃表 Redis在Spring中的使用Redis 中为什么单线程比多线程快Redis的分布式锁如何实现Redis 分布式锁可能出现的问题Redis保持数据不丢失的方式…

掌握C语言输入技巧:getchar()函数消除回车符困扰

在C语言编程的旅程中&#xff0c;你可能会遇到一个令人困惑的情况&#xff1a;使用getchar()函数获取字符时&#xff0c;那讨厌的回车符&#xff08;\n&#xff09;又是如何产生和处理的呢&#xff1f;本文将为你揭示这个问题&#xff0c;并分享几种消除回车符困扰的经验。 一…

企升编辑器word编写插件

面向用户群体招投标人员&#xff0c;用统一的模板来编写标书&#xff0c;并最终合并标书。项目经理&#xff0c;编写项目开发计划书&#xff0c;项目验收文档等。开发人员&#xff0c;编写项目需求规格说明书、设计说明书、技术总结等文档。其他文档编写工作量较多的岗位人员。…

vue 点击顶部tab重新请求列表

我们点击 1 2 来回切换时,发现客户经理的列表不会重新请求(菜单中含有客户经理) 这时我们添加以下代码就可以了 watch: {$route(route) {this.getList()}},/** 查询客户经理列表 */getList() {this.loading true;listManager(this.queryParams).then(response > {this.mana…

垃圾搜集器UseParallelGC

查看jdk支持的垃圾收集器有哪些&#xff1f; 当前进程使用的垃圾收集器是什么&#xff1f; 查看默认设置 查看默认设置命令&#xff1a; java -XX:PrintCommandLineFlags -version# -XX:UseParallelGC 查看默认垃圾收集器详细信息命令 通过新生代、老年代名字确定垃圾收集器…

【CSS3】CSS3 动画 ④ ( 使用动画制作地图热点图 )

文章目录 一、需求说明二、动画代码分析1、地图背景设置2、热点动画位置测量3、热点动画布局分析4、动画定义5、小圆点实现6、波纹效果盒子实现7、延迟动画设置 三、代码示例 一、需求说明 实现如下效果 , 在一张地图上 , 以某个位置为中心点 , 向四周发散 ; 核心 是实现 向四周…

git使用(常见用法)

一.下载git git官方下载跳转 安装简单,有手就行 二. git的简单使用 1. 连接远程仓库 #初始化 git init #配置账户 git config --global user.name “输入你的用户名” git config --global user.email “输入你的邮箱” git config --list #--q退出 #配置验证邮箱 ssh-key…

前端懒加载

懒加载的概念 懒加载也叫做延迟加载、按需加载&#xff0c;指的是在长网页中延迟加载图片数据&#xff0c;是一种较好的网页性能优化的方式。在比较长的网页或应用中&#xff0c;如果图片很多&#xff0c;所有的图片都被加载出来&#xff0c;而用户只能看到可视窗口的那一部分…

【网络编程】利用套接字实现一个简单的网络通信(UDP实现聊天室 附上源码)

网络编程套接字 &#x1f41b;预备知识&#x1f98b;理解源IP地址和目的IP地址&#x1f40c;认识端口号&#x1f41e; 理解 "端口号" 和 "进程ID"&#x1f41c;简单认识TCP协议&#x1f99f;简单认识UDP协议&#x1f997; 什么是网络字节序 &#x1f577;相…

使用 Docker 和 Streamlit 构建和部署 LangChain 支持的聊天应用程序

文章目录 前言聊天应用程序组件和技术LangChain Python框架开放人工智能模型前端 Streamlit UI使用 Docker 进行部署Docker 优化以实现轻量级和快速构建Docker-compose.yaml 文件基础设施Streamlit 公共云谷歌应用引擎使用 Google Cloud Run 部署应用1.启动服务2. 创建角色并将…

Debezium系列之:增量快照初始化历史数据实际应用案例

Debezium系列之:增量快照初始化历史数据实际应用案例 一、需求背景二、查看数据库表数据三、使用增量快照采集历史数据四、初始化历史数据一、需求背景 采集数据库数据发送到Kafka Topic,供下游实时开发消费,在采集最新数据的同时,希望把历史数据也发送到Kafka Topic同时采…