位运算问题

1. 只出现一次的数字 III

题目描述:
在这里插入图片描述

算法原理:
因为两个相同的数经过异或就等于0,所以首先将数组中的每个数字异或到一起,这样就得到了两个出现一次的元素的异或值。假设得到的异或值为n,那么我们去求异或值的最低位的1,也就是将n&(-n),通过这个最低位的1就可以将nums数组分为两类,一类是在这一位为0,一类是在这一位为1,将这两类数分别一起异或即可分别得到两个只出现一次得元素。
代码如下:

class Solution {
    public int[] singleNumber(int[] nums) {
        int sum = 0;

        for (int x : nums) {
            sum ^= x;
        }

        sum = (sum == Integer.MIN_VALUE ? Integer.MIN_VALUE : (sum & -sum));

        int[] arr = new int[2];
        for (int x : nums) {
            if ((sum & x) != sum) {
                arr[0] ^= x;
            } else {
                arr[1] ^= x;
            }
        }

        return arr;
    }
}

题目链接

2. 丢失的数字(268)

题目描述:
在这里插入图片描述

算法原理:
这题比较简单有很多方法,这里就介绍以下位运算的解法,题目给了n长度的数组,数组中填写0到n数字中的任意n-1个数字,然后叫我们去找没有放到数组中的值,实际上很简单就直接将0到n的数字以及数组中的数字一起异或即可得到最终结果。
代码如下:

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

        return ret ^ n;
    }
}

题目链接

3. 两整数之和(371)

题目描述:
在这里插入图片描述

算法原理:
异或有一个特性就是相加但是不进位,所以我们首先将a和b相异或得到mul。之后我们处理进位,将a和b相与得到carry只有同一位都为一时最终的结果carry中的同一位才会为1,但是此时的进位距离真正的进位还需要整体向左移动一位,这还是比较好理解的。最终将移动后的carry和mul分别作为新的b和a重复上述的过程直至b等于0也就是进位等于0的时候停止。之后返回a也就是两数之和。
代码如下:

class Solution {
    public int getSum(int a, int b) {
        while (b != 0) {
            int carry = (a & b) << 1;
            int mul = a ^ b;
            a = mul;
            b = carry;
        }
        return a;
    }
}

题目链接

4. 只出现一次的数字 II(137)

题目描述:
在这里插入图片描述

算法原理:
因为其它数字都是重复出现了三次,假设将所有的数字按位累加起来,我们先对任意一位进行分析,假设单独出现一次的数字一位为0时,在按位累加之和就会出现两种情况,第一种就是0,第二种就是3n,当单独出现一次的数字的一位为1时也会出现两种情况,第一种就是1,第二种就是3n+1(上述的n可能会小于数组总的长度),当我们将上述的四种情况的结果%3的时候不难发现最终得到的数字就是单独出现一次的数字的在那一位的数字,这样我们就可以将每一位都这样相加最终%3得到单独出现的数字的每一位进而得到单独出现的那一个数字。
代码如下:

class Solution {
    public int singleNumber(int[] nums) {
        int ret = 0;
        for (int i = 0; i < 32; i++) {
            int sum = 0;
            for (int j = 0; j < nums.length; j++) {
                if (((nums[j] >> i) & 1) == 1) {
                    sum++;
                }
            }
            sum %= 3;
            ret |= (sum << i);
        }

        return ret;
    }
}

题目链接

5. 消失的两个数字(面试题 17.19.)

题目描述:
在这里插入图片描述

算法原理:
这题是第一题和第二题的糅合,首先通过第二题的思想将数组中所有值和1到N(N就是nums.length+2)中所有值异或到一起得到消失的两个数字的异或值sum,再通过第一题的思想将sum&(-sum)得到sum最右端的1并且将其它位变为0,之后在nums数字以及1到N中去遍历,当遍历的值&sum等于sum的值分为一类,不等于另外分为一类并且分别异或放到数组中返回。
代码如下:

class Solution {
    public int[] missingTwo(int[] nums) {
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum ^= nums[i];
            sum ^= i + 1;
        }
        sum ^= nums.length + 1;
        sum ^= nums.length + 2;

        int temp = sum & (-sum);
        int[] ret = new int[2];
        for (int i = 1; i <= nums.length + 2; i++) {
            if ((temp & i) != temp) {
                ret[0] ^= i;
            } else {
                ret[1] ^= i;
            }
        }

        for (int i = 0; i < nums.length; i++) {
            if ((temp & nums[i]) != temp) {
                ret[0] ^= nums[i];
            } else {
                ret[1] ^= nums[i];
            }
        }
        return ret;
    }
}

题目链接

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python自动化之validator验证数据【代码示例】

思路&#xff1a; 首先定义验证规则schema&#xff0c;包含name&#xff0c;age和email三个字段&#xff1b; 然后创建验证器对象validator&#xff0c;并将schema作为参数传递给它&#xff1b; 最后定义要验证的数据data&#xff0c;使用validator的validate方法进行验证&a…

【Stable Diffusion】(基础篇三)—— 图生图基础

图生图基础 本系列笔记主要参考B站nenly同学的视频教程&#xff0c;传送门&#xff1a;B站第一套系统的AI绘画课&#xff01;零基础学会Stable Diffusion&#xff0c;这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili 本文主要讲解如何使用S…

数据结构(5.0)——树的定义和基本术语

树的基本概念 树是n(n>0)个结点的有限集合&#xff0c;n0时&#xff0c;称为空树&#xff0c;这是一种特殊情况。在任意一颗非空树中应该满足: 有且仅有一个特定的称为根的结点。 当n>1时&#xff0c;其余结点可分为m(m>0)个互不相交的有限集合T1、T2、.......&…

C++第七弹 -- C/C++内存管理

目录 前言一. C/C内存分布二. C语言中动态内存管理方式三. C中动态内存管理四. operator new与operator delete函数五. new和delete的实现原理1.内置类型2. 自定义类型 六. 定位new表达式(placement-new)七. 常见面试题总结 前言 在C/C编程中&#xff0c;内存管理是至关重要的…

领夹麦克风品牌排行榜前十名,录短视频用什么麦克风好?

随着自媒体行业的迅猛发展&#xff0c;对高品质音频设备的需求日益增长&#xff0c;尤其是无线领夹麦克风因其便携性和实用性受到了广泛欢迎。这种麦克风不仅适用于新闻采访和节目录制&#xff0c;也成为了网络直播和Vlog创作者的得力助手。它们能够提供清晰的录音效果&#xf…

最新版康泰克完整版- Kontakt v7.10.5 for Win和Mac,支持m芯片和intel,有入库工具

一。世界最受欢迎的采样器的新篇章 Native Instruments Kontakt是采样器领域的标准&#xff0c;您将获得高质量的滤波器&#xff0c;在这里您将找到经典的模拟电路和最现代的滤波器。每一个都可以根据您的口味进行定制&#xff0c;并且由于它&#xff0c;您可以获得前所未有的声…

AIGC笔记--基于Stable Diffusion实现图片的inpainting

1--完整代码 SD_Inpainting 2--简单代码 import PIL import torch import numpy as np from PIL import Image from tqdm import tqdm import torchvision from diffusers import AutoencoderKL, UNet2DConditionModel, DDIMScheduler from transformers import CLIPTextMod…

源码安装zabbix5.0.36完整版

源码安装zabbix5.0.36完整版 环境&#xff1a;CentOS Linux release 7.9&#xff0c;cpu:16&#xff0c;mem:32G软件包如下&#xff1a; zabbix-5.0.36.tar.gz mysql-8.0.28-linux-glibc2.17-x86_64-minimal.tar.xz nginx-1.6.2.tar.gz 1. 配置前准备 systemctl stop firewa…

K8s集群初始化遇到的问题

kubectl describe pod coredns-545d6fc579-s9g5s -n kube-system 找到原因1&#xff1a;CoreDNS Pod 处于 Pending 状态的原因是集群中的节点都带有 node.kubernetes.io/not-ready 污点 journalctl -u kubelet -f 14:57:59.178592 3553 remote_image.go:114] "PullIma…

集群节点状态异常的解决方式

文章目录 集群节点状态异常的解决方式问题概述解决方式1.关闭所有服务2.对所有集群删除Hadoop相关文件2.1 删除Hadoop系统运行时创建的临时数据和文件2.2 删除Hadoop的数据文件 3.重新对Hadoop节点进行初始化和启用4.重启服务&#xff0c;检查节点状态 集群节点状态异常的解决方…

Parallels Desktop 19 for Mac(PD19虚拟机)详细图文安装教程分享

Parallels Desktop 19是一款功能丰富、性能强大且易于使用的虚拟机软件&#xff0c;它可以让您在Mac上同时运行多个操作系统&#xff0c;为您提供更大的灵活性和兼容性。 Parallels Desktop 19 for Mac(PD19虚拟机)下载安装包 Parallels Desktop 19 for Mac(PD19虚拟机)详细图…

护眼台灯的功能作用有哪些?深挖台灯护眼是真的吗

随着现代生活方式的改变&#xff0c;孩子们面临着越来越多的视力挑战。在近视学生中&#xff0c;近10%为高度近视&#xff0c;且占比随年级升高而增长。幼儿园6岁儿童中有1.5%为高度近视&#xff0c;而高中阶段则达到了17.6%。为了守护孩子们的视力健康&#xff0c;在科技飞速发…

查看apk版本号

获取未安装的apk版本号 1. 使用aapt命令 使用cmd cd到aapt工具的位置。位于‌Android SDK的build-tools目录下。 使用aapt命令&#xff0c;指向apk所在绝对路径 aapt dump badging your_apk_file.apk &#xff08;win7按住shift键&#xff0c;右键apk文件选择“复制为路径”…

自学鸿蒙HarmonyOS的ArkTS语言<十>@BuilderParam装饰器

作用&#xff1a;当子组件多处使用时&#xff0c;给某处的子组件添加特定功能 一、初始化 1、只能被Builder装饰的方法初始化 2、使用所属自定义组件的builder方法初始化 3、使用父组件的builder方法初始化 - 把父组件的builder传过去&#xff0c;参数名和子组件的builderPar…

Android NDK开发之震动服务客户端编写程序(C++)

一、背景 最近有个小伙伴问我可不可以写一个可执行程序(C/C) 来实现Android设备的震动的功能。 作为一个多年的Android开发者&#xff0c;我觉得这是可以实现的。 但是由于过去我一直做App开发&#xff0c;也就把这个实现过程想简单了。 经过了几天的折腾&#xff0c;终于算是…

【python学习】numpy第三方库的定义、功能、使用场景和使用以及遇到的一些问题

引言 python学习学习到第三方库知识&#xff0c;首先学习的就是机器学习以及对应的numpy第三方库 文章目录 引言一、numpy第三方库的定义二、numpy第三方库的功能2.1数组操作2.2 线性代数计算2.3 随机数生成2.4 文件读写 三、numpy第三方库的使用场景3.1需要进行数值计算3.2 需…

【连续四届EI检索|稳定ACM出版、EI检索|线上线下结合】2024年第五届医学人工智能国际学术会议(ISAIMS 2024,8月13-17)

第五届医学人工智能国际学术会议&#xff08;ISAIMS2024&#xff09;将于2024年8月13-17日于荷兰阿姆斯特丹自由大学召开&#xff0c;国内分会场将于2024年10月25-27日于中国武汉召开。 会议自2020年至今已经成功举办四届&#xff0c;吸引了来自海内外相关领域学者600余名。本届…

C# Opencv实现本地以图搜图

地址&#xff1a;冯腾飞/本地以图搜图

【找不到视图问题解决】@RestController 与 @Controller注解的使用区别

一、问题描述 苍穹外卖在菜品分页查询功能实现的过程中&#xff0c;出现了找不到视图的情况 2024-07-12 21:54:20.860 ERROR 22488 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with p…

OpenSceneGraph学习笔记

目录 引言第一章&#xff1a;OSG概述一、前言&#xff08;1&#xff09;为什么要学习OSG?&#xff08;2&#xff09;OSG的组成&#xff08;3&#xff09;OSG的智能指针&#xff08;4&#xff09;OSG的安装编译 二、第一个OSG程序&#xff08;1&#xff09;Hello OSG程序&#…