[LeetCode热门100题]|137,260,268,面试17.19

news2025/3/14 23:48:28

1、137 只出现一次数字||

        1、题目描述

137 只出现一次数字||https://leetcode.cn/problems/single-number-ii/description/

给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。

 

        2、算法思路

        -2^{31} \leq \text{nums}[i] \leq 2^{31} - 1,所有我们只需要给一个32的空间,并且用一个表示符号位就可以。

        并且统计每个位置上的1是否是3的倍数,不是的话那个 i 位置上就是1

        用a[i]表示a第i个位置的元素,n=nums.length-1,x表示有n个数的第i个位置是上1

itotal结果
313n个0+a[i]%3a[i]
303x个1+a[i]%3a[i]
........3(n-x)个0+3x个1+a[i]%3a[i]
03(n-x)个0+3x个1+a[i]%3a[i

        3、算法代码

class Solution {
    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);
            }
            if(total % 3 != 0){
                ans |= (1 <<i);
            }
        }
        return ans;
    }
}

        4、结果运行

2、260只出现一次数字|||

        1、题目描述

260. 只出现一次的数字 III - 力扣(LeetCode)https://leetcode.cn/problems/single-number-iii/description/

给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。

你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。

        2、算法思路

  • 先得出a^b=temp
  • temp不可能是0,所有肯定a和b是最少有一个地方不一样,因为是异或,所有temp出现1的地方就是a和b的差别
  • 找出第temp数的第diff个位置是1的地方,就可以知道a和b的第diff个位置的元素不一样,肯定是一个diff位置是0,另一个就是1
  • 把数组中的元素的第diff位置为1的地方放在ret[1],并且给他们异或,因为有2个相同的元素可以刚刚好消除掉,剩下的放入ret[0]也是进行异或操作

        3、算法代码

class Solution {
        public static int[] singleNumber(int[] nums) {
        //1、先把所有的数字异或在一起,然后得出 a^b=temp
        int temp = 0;
        for (int x:nums) temp ^= x;
        //找出temp一个位置是1的地方
        int diff = 0;
        while (true){
            if (((temp >> diff) & 1)==1) break;
            else diff++;
        }
        //然后把第diff位的为1的放在一个ret[1],第diff位置为0反在ret[0]然后全部都异或剩下的就是需要返回
        int[] ret = new int[2];
        for (int x:nums){
            if (((x >> diff)&1)==1)ret[1] ^=x;
            else ret[0] ^=x;
        }
       return ret;


    }
}

        4、结果运行

3、268丢失的数字

可以看我的这篇文章

力扣热门100题【面试题01.01,268】-CSDN博客https://blog.csdn.net/EdgeAI/article/details/146182204?spm=1001.2014.3001.5501

        1、题目描述

268. 丢失的数字 - 力扣(LeetCode)https://leetcode.cn/problems/missing-number/description/给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。

        2、算法代码

class Solution {
    public int missingNumber(int[] nums) {
        int ret = 0;
        for(int x:nums) ret ^=x;
        for(int i=0;i<=nums.length;i++)ret ^=i;
        return ret;
    }
}

        3、结果运行

4、面试17.19消失的两个个数字(结合260和268)

这道题目结合260和268一起做很更加简单,这就是为什么我把它放在最后。

        1、题目描述

        2、算法思路

  • 找出缺少的两个数字等到他们的异或
  • 找出他们异或的位置不一样的位置,可以是任何地方位置是1的地方,为了方便我就寻找右边第一个是1的位置
  • 并且按照题目260,只出现一次的数字||| 把他们的第diff个位置为0的异或以后放在ret[0],第diff个位置为1的异或以后放在ret[1]
  • 这个时候数字还没有抵消因为没有一样的,所以这个时候我们遍历1 到 N 所有的整数就可以抵消掉

        3、算法代码

class Solution {
    public int[] missingTwo(int[] nums) {
        //先把缺少的2个数字找出来
        int temp = 0;
        for(int x:nums) temp ^=x;
        for(int i=1;i<=nums.length+2;i++) temp ^=i;

        //目前的temp中有缺少的2个数字的异或
        //先找出从右往左 找出temp的第一个1
        int diff = 0;
        while(true){
            if(((temp >> diff)&1)==1) break;
            else diff++;
        }

        //按照 diff 位置的不同 把第diff位置为0的分成一部分,为1的分成一部分
        int[] ret = new int[2];
         for(int n : nums){
            if(((n >> diff) & 1) == 1) ret[1] ^= n;
            else ret[0] ^= n;
         }
        for(int i = 1; i <= nums.length + 2; i++){
            if(((i >> diff) & 1) == 1) ret[1] ^= i;
            else ret[0] ^= i;
        }
        return ret;
    }
}

        4、结果运行

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

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

相关文章

Android子线程更新View的方法原理

对于所有的Android开发者来说&#xff0c;“View的更新必须在UI线程中进行”是一项最基本常识。 如果不在UI线程中更新View&#xff0c;系统会抛出CalledFromWrongThreadException异常。那么有没有什么办法可以不在UI线程中更新View&#xff1f;答案当然是有的&#xff01; 一…

Kafka常用指令(详细)

Kafka常用指令&#xff08;详细&#xff09; 启停命令 前台启动 前台启动命令 ./bin/kafka-server-start.sh config/server.properties 后台启动方式1 后台启动命令加上参数-daemon&#xff0c;窗口关闭之后kafka后台程序继续运行 ./bin/kafka-server-start.sh -daemon co…

2025移动端软件供应链安全开源治理方案最佳实践

2025年3月13日&#xff0c;由中国软件评测中心、CAPPVD漏洞库联合主办的“第六期移动互联网APP产品安全漏洞技术沙龙”在海口成功召开。悬镜安全基于移动端数字供应链安全开源治理方案荣获中国软件评测中心“2024移动互联网APP产品安全漏洞治理”优秀案例&#xff0c;并获颁证书…

《C#上位机开发从门外到门内》2-3:SPI总线协议详解及应用实践

文章目录 一、引言二、SPI总线协议的基本原理三、SPI通信模式详解 —— CPOL与CPHA3.1 时钟极性&#xff08;CPOL&#xff09;3.2 时钟相位&#xff08;CPHA&#xff09;3.3 四种SPI模式 四、主从设备通信机制4.1 通信流程概述4.2 数据帧结构与传输细节4.3 主设备与从设备的协同…

vscode出现:No module named ‘requests‘ 问题的解决方法

问题&#xff1a; ① No module named requests ② pip install requests&#xff1a;显示已经安装成功 运行失败原因&#xff1a; 我的失败原因是因为&#xff1a;我的python环境有两个&#xff0c;电脑C盘默认一个、pycharm下载后在它的路径下有一个。而vscode所运行的环境…

【openwebui 搭建本地知识库(RAG搭建本地知识库)】

安装准备 openwebui 这个本地安装之前写过使用python安装。也可以直接用docker 命令 docker run --rm -d \-p 3080:8080 \-p 3081:8081 \-e WEBUI_AUTHtrue \-e DEFAULT_LOCALEcn \-e GLOBAL_LOG_LEVEL"INFO" \-e AIOHTTP_CLIENT_TIMEOUT100 \--privilegedtrue \-…

雷池WAF 处理 HTTP 请求的流程

项目介绍 SafeLine&#xff0c;中文名 "雷池"&#xff0c;是一款简单好用, 效果突出的 Web 应用防火墙(WAF)&#xff0c;可以保护 Web 服务不受黑客攻击。 雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受 SQL 注入、…

JAVA-Thread类实现多线程

引言&#xff1a; 本章博客涉及进程线程内容&#xff0c;如果不了解的可以看&#xff1a;什么是进程线程-CSDN博客 线程是操作系统的概念&#xff0c;操作系统提供的API供程序员使用操作。但是不同的操作系统(Winodws、Linux、Unix……差别很大),但是做为JAVA程序员就不需要担心…

【算法】DFS、BFS、拓扑排序

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;算法 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 持续更新中...1、DFS2、BFSN 叉树的层序遍历二叉树的锯齿形层序遍历二叉树最大宽度 3、多源BFS腐烂的苹果 4、拓扑排序 持续更新中…

MySQL中 IN 到底走不走索引?

文章目录 前言数据库表结构查询sqlEXPLAIN介绍EXPLAIN 的输出每列解释 强制走索引查询时添加条件(复合索引字段)查询小时查询分钟 总结 前言 在 MySQL 中&#xff0c;IN 语句是否能够利用索引取决于多个因素&#xff0c;包括但不限于查询的具体形式、表的统计信息、索引的选择…

centos没有ll

vi /etc/bashrc alias ll‘ls -l’ source /etc/bashrc

腾讯云低代码开发应用

创建客户端应用 如上所示&#xff0c;登录腾讯云微搭低代码业务控制台&#xff0c;开始搭建企业官网应用 如上所示&#xff0c;在腾讯云微搭低代码业务控制台中&#xff0c;开始创建企业官网应用 如上所示&#xff0c;在腾讯云微搭低代码业务控制台中&#xff0c;开始编辑企业官…

深度学习项目--基于DenseNet网络的“乳腺癌图像识别”,准确率90%+,pytorch复现

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 如果说最经典的神经网络&#xff0c;ResNet肯定是一个&#xff0c;从ResNet发布后&#xff0c;很多人做了修改&#xff0c;denseNet网络无疑是最成功的…

【Linux 指北】常用 Linux 指令汇总

第一章、常用基本指令 # 注意&#xff1a; # #表示管理员 # $表示普通用户 [rootlocalhost Practice]# 说明此处表示管理员01. ls 指令 语法&#xff1a; ls [选项][目录或文件] 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xf…

docker 搭建alpine下nginx1.26/mysql8.0/php7.4环境

docker 搭建alpine下nginx1.26/mysql8.0/php7.4环境 docker-compose.yml services:mysql-8.0:container_name: mysql-8.0image: mysql:8.0restart: always#ports:#- "3306:3306"volumes:- ./etc/mysql/conf.d/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro- ./var/log…

Android7上移植I2C-tools

一&#xff0c;下载源码 cd hardware/libhardware/tests git clone https://git.kernel.org/pub/scm/utils/i2c-tools/i2c-tools.git 二&#xff0c; 在 i2c-tools 目录添加 Android.mk 编译文件 LOCAL_PATH: $(call my-dir)################### i2c-tools ###############…

Centos 7 修改语言和输入源为中文+修改终端快捷键复制为Ctrl+C、粘贴为Ctrl+V

目录 修改语言和输入源为中文 1、设置 2、Region & Language&#xff08;区域和语言&#xff09; 3、Add an Input Source&#xff08;添加输入源&#xff09; 4、修改语言为中文 5、Restart&#xff08;重启&#xff09; 6、Log Out &#xff08;注销&#xff09; …

DeepSeek-进阶版部署(Linux+GPU)

前面几个小节讲解的Win和Linux部署DeepSeek的比较简单的方法&#xff0c;而且采用的模型也是最小的&#xff0c;作为测试体验使用是没问题的。如果要在生产环境使用还是需要用到GPU来实现&#xff0c;下面我将以有一台带上GPU显卡的Linux机器来部署DeepSeek。这里还只是先体验单…

Python——计算机网络

一.ip 1.ip的定义 IP是“Internet Protocol”的缩写&#xff0c;即“互联网协议”。它是用于计算机网络通信的基础协议之一&#xff0c;属于TCP/IP协议族中的网络层协议。IP协议的主要功能是负责将数据包从源主机传输到目标主机&#xff0c;并确保数据能够在复杂的网络环境中正…

一招解决Pytorch GPU版本安装慢的问题

Pytorch是一个流行的深度学习框架&#xff0c;广泛应用于计算机视觉、自然语言处理等领域。安装Pytorch GPU版本可以充分利用GPU的并行计算能力&#xff0c;加速模型的训练和推理过程。接下来&#xff0c;我们将详细介绍如何在Windows操作系统上安装Pytorch GPU版本。 查看是否…