算法-位运算-只出现一次的数字 II

news2024/11/29 1:43:18

算法-位运算-只出现一次的数字 II

1 题目概述

1.1 题目出处

https://leetcode.cn/problems/bitwise-and-of-numbers-range/description/?envType=study-plan-v2&envId=top-interview-150

1.2 题目描述

在这里插入图片描述

2 逐个按位与运算

2.1 思路

最简单的就是直接挨个做与运算,但要注意result = 0、循环到 Integer.MAX_VALUE时的特殊处理。

2.2 代码

class Solution {
    public int rangeBitwiseAnd(int m, int n) {
        if(m == Integer.MAX_VALUE){
            return m;
        }
        int result = m;
        for (int i = m + 1; i <= n; i++) {
            result &= i;
            // result=0时,提前退出,因为0和任何数按位与都是0
            // i = Integer.MAX_VALUE时,也需要退出,否则i++后会因为补码的原因直接变为-2147483648了,会死循环
            if(result == 0 ||  i == Integer.MAX_VALUE){
                break;
            }
        }
        return result;
    }
}

2.3 时间复杂度

O(n)

2.4 空间复杂度

O(1)

3 公共前缀法

3.1 思路

所有数字从左往右开始找公共前缀,直到第一个不为一致的位,在这之后的都置为0,保留左边的公共前缀。

比如 [4,7],100 & 101 & 110 & 111,公共前缀为1,则结果为100 即4.

这里不会出现如 101XXX & 111YYY = 101000这样的情况,因为我们题意指定数字是每次等差为1递增的,101XXX 递增到 111YYY 之间,肯定有 110DDD这样的数字,导致和 101XXX和111YYY的第三位1一起相与结果为0。所以只需要考虑最左公共前缀即可。

  1. 找公共前缀的方法,就是把m和n一起往右按位移动,并记录下移动次数moveCount,直到m==n为止。
  2. 将m往左按位移动moveCount次,得到的结果就是最终结果了

3.2 代码

class Solution {
    public int rangeBitwiseAnd(int m, int n) {
        if (m == n) {
            return m;
        }
        if (m == 0) {
            return 0;
        }
        if ((m & n) == 0) {
            return 0;
        }

        int moveCount = 0;
        while (m != n) {
            m >>= 1;
            n >>= 1;
            moveCount++;
        }
        return m << moveCount;
    }
}

3.3 时间复杂度

O(logn)

3.4 空间复杂度

O(1)

4 统计int每位为1出现次数

4.1 思路

题意中已经明确指出除了一个数字外,其他数字都出现三次,那么我们就按二进制累加数字每一位为1的,最后再对每一位对3取余数。最后余数为1的位置,就是只出现过的一次的数字的二进制组成。把他还原即可

4.2 代码

class Solution {
    public int singleNumber(int[] nums) {
        // 一个int 32位
        int[] counts = new int[32];
        // 统计所有数字
        for(int num : nums) {
            for(int j = 0; j < 32; j++) {
                // 将当前数字按拆成二进制,每位和1与运算,如果不为0就统计
                counts[j] += num & 1;
                // 无符号右移一位,以便计算下一二进制位
                num >>>= 1;
            }
        }

        int res = 0;
        for(int i = 31; i >= 0; i--) {
            // 从高位开始每次处理一位
            res <<= 1;
            // 该二进制位的1出现次数,先对3取余,再和当前位求或运算
            // 比如 1 | 1 = 1 则最高位是出现一次的数字的二进制位
            // 10 | 1 = 11 则次高位也是出现一次的数字的二进制位
            // 100 | 0 = 100 则第三高位不是出现一次的数字的二进制位
            res |= counts[i] % 3;
        }
        return res;
    }
}

4.3 时间复杂度

在这里插入图片描述
O(N)

4.4 空间复杂度

O(1)

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

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

相关文章

transformers简介

目录 1、前言 2、网络结构 &#xff08;1&#xff09;、Transformers的总体架构可以分为四部分 &#xff08;2&#xff09;、输入文本包含 &#xff08;3&#xff09;、输出部分包含 &#xff08;4&#xff09;、编码器部分 &#xff08;5&#xff09;、解码器部分 1、前…

dbeaver连接国产数据库

dbeaver是常用的数据库连接工具。但是在连接一些国产的数据库时&#xff0c;因为没有可选的驱动&#xff0c;所以需要我们先设置驱动&#xff0c;在连接。以下是一个连接highgo例子。 首先先新增一个驱动&#xff1a; 在页面的菜单栏&#xff0c;选择 数据库 ->驱动管理器…

SpringBoot整合阿里云OSS文件存储解决方案

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Sp…

【AI视野·今日Sound 声学论文速览 第十五期】Fri, 29 Sep 2023

AI视野今日CS.Sound 声学论文速览 Fri, 29 Sep 2023 Totally 1 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers Audio-Visual Speaker Verification via Joint Cross-Attention Authors R. Gnana Praveen, Jahangir Alam使用语音信号进行了说话人验证的…

Web开发-新建Spring Boot项目

目录 Spring Boot 与 Web开发Spring Boot 与 MavenJava 环境搭建下载JDK下载xmapp下载navicat for mysql下载Eclipse配置tomcat配置maven 新建Spring Boot项目 Spring Boot 与 Web开发 Spring Boot 是一种用于简化 Spring 应用程序开发、部署和运行的框架&#xff0c;而 Web 开…

【LeetCode】滑动窗口妙解无重复字符的最长子串

Problem: 3. 无重复字符的最长子串 文章目录 思路算法原理分析暴力枚举 哈希表滑动窗口 复杂度Code 思路 首先我们来分析一下本题的思路 如果读者有看过 长度最小的子数组 的话就可以清楚这个子串其实和子数组是一个道理&#xff0c;都是 连续的一段区间但是呢它们本质上还是存…

【数据结构】队列和栈

大家中秋节快乐&#xff0c;玩了好几天没有学习&#xff0c;今天分享的是栈以及队列的相关知识&#xff0c;以及栈和队列相关的面试题 1.栈 1.1栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作…

Java字符缓冲流自己特有的方法进行读入和写出

代码如下&#xff1a; public class MyWork {public static void main(String[] args) throws IOException{BufferedReader fr new BufferedReader(new FileReader("myfile/abc.txt"));BufferedWriter fw new BufferedWriter(new FileWriter("myfile/test.tx…

(一)gitblit安装教程

(一)gitblit安装教程 (二) gitblit用户使用教程 (三) gitblit管理员手册 目录 前言安装1.下载Java Runtime Requirement 2.设置环境变量3.gitblit内容3.1 gitblit文件夹内容3.2 defaults.properties 主要配置选项 4 配置4.1 准备文件4.2 修改gitblit.properties4.3 修改authori…

第十四届蓝桥杯大赛软件赛决赛 C/C++ 大学 B 组 试题 E: 数三角

[蓝桥杯 2023 国 B] 数三角 【问题描述】 小明在二维坐标系中放置了 n n n 个点&#xff0c;他想在其中选出一个包含三个点的子集&#xff0c;这三个点能组成三角形。然而这样的方案太多了&#xff0c;他决定只选择那些可以组成等腰三角形的方案。请帮他计算出一共有多少种选…

凉鞋的 Unity 笔记 101. Hello Unity

101. Hello Unity 学习任何一门技术&#xff0c;第一件事就是先完成 Hello World&#xff01;的输出 所以我们来完成 Unity 的 Hello World。 我们所使用的 Unity 版本是 2023.x 版本。 安装的过程就不给大家展示了。 我们从新建项目开始。 新建项目 打开 Unity Hub 后&…

商圣范蠡见好就收,散尽钱财求得好死

有所得必有所失&#xff0c;有所利必有所害。 人弃我捡&#xff0c;人争我弃。 巴菲特说过&#xff1a;“别人恐惧我贪婪&#xff0c;别人贪婪我恐惧。” 一、商圣 公元前536年&#xff0c;范蠡出生在楚国&#xff0c;家境贫寒。范蠡&#xff0c;字少伯。虽然家里穷&#xf…

大数据Doris(三):Doris编译部署篇

文章目录 Doris编译部署篇 一、Doris编译

装饰器模式详解和实现

装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你动态地将对象添加到现有对象中&#xff0c;以提供额外的功能&#xff0c;同时又不影响其他对象。 实现示例 1.定义一个接口或抽象类&#xff0c;表示被装饰对象的公共接口 //抽…

[02] Multi-sensor KIT: DSP 矩阵运算-加法,减法和逆矩阵,放缩,乘法和转置矩阵

1.概述 2.API ◄ arm_mat_init_f32 浮点矩阵初始化 ◄ arm_mat_add_f32 矩阵加法 ◄ arm_mat_mult_f32 矩阵乘法 ◄ arm_mat_inverse_f32 矩阵A的逆矩阵 ◄ arm_mat_scale_f32 矩阵A乘以系数 ◄ arm_mat_inverse_f32 矩阵A减法 ◄ arm_mat_inverse_f32 矩阵A的装置 3.矩阵初…

Spring Security 简单token配置

Spring Security 简单token配置 说明&#xff1a;非表单配置 先上码&#xff1a; https://gitee.com/qkzztx_admin/security-demo/tree/master/demo-two 环境&#xff1a;win10 idea2023 springboot2.7.6 maven3.8.6 代码清单说明 依赖&#xff1a; <dependency><…

mysql报错:Column Count Doesn‘t Match Value Count at Row 1

mysql中执行insert、update、delete报错&#xff1a;Column Count Doesnt Match Value Count at Row 1 的解决方案 通常情况&#xff1a;字段不匹配 如&#xff1a;student有id, name, age字段 -- 错误写法 INSERT INTO student VALUES(5,horse)-- 正确写法 INSERT INTO stu…

【JavaEE】CAS(Compare And Swap)操作

文章目录 什么是 CASCAS 的应用如何使用 CAS 操作实现自旋锁CAS 的 ABA 问题CAS 相关面试题 什么是 CAS CAS&#xff08;Compare and Swap&#xff09;是一种原子操作&#xff0c;用于在无锁情况下保证数据一致性的问题。它包含三个操作数——内存位置、预期原值及更新值。在执…

ElasticSearch 10000条查询数量限制

一、前言 我们将库存快照数据导入ES后发现要分页查询10000条以后的记录会报错&#xff0c;这是因为ES通过index.max_result_window这个参数控制能够获取数据总数fromsize最大值&#xff0c;默认限制是10000条&#xff0c;因为ES考虑到数据要从其它节点上报到协调节点如果搜索请…

【Java 进阶篇】MySQL启动与关闭、目录结构以及 SQL 相关概念

MySQL 服务启动与关闭 MySQL是一个常用的关系型数据库管理系统&#xff0c;通过启动和关闭MySQL服务&#xff0c;可以控制数据库的运行状态。本节将介绍如何在Windows和Linux系统上启动和关闭MySQL服务。 在Windows上启动和关闭MySQL服务 启动MySQL服务 在Windows上&#x…