【优选算法】(第十八篇)

embedded/2024/10/4 15:00:35/

目录

两整数之和(medium)

题目解析

讲解算法原理

编写代码

只出现⼀次的数字II(medium)

题目解析

讲解算法原理

编写代码


两整数之和(medium)

题目解析

1.题目链接:. - 力扣(LeetCode)

2.题目描述

给你两个整数a和b,不使⽤运算符+和-,计算并返回两整数之和。
⽰例1:
输⼊:a=1,b=2
输出:3
⽰例2:
输⼊:a=2,b=3
输出:5
提⽰:
-1000<=a,b<=1000

讲解算法原理

解法(位运算):
算法思路:
◦ 异或 ^ 运算本质是「⽆进位加法」;
◦ 按位与 & 操作能够得到「进位」;
◦ 然后⼀直循环进⾏,直到「进位」变成 0 为⽌。

编写代码

c++算法代码:

class Solution
{
public:int getSum(int a, int b) {while(b != 0){int x = a ^ b; // 先算出⽆进位相加的结果unsigned int carry = (unsigned int)(a & b) << 1; // 算出进位 a = x;b = carry;}return a;}
};

java算法代码:

class Solution {public int getSum(int a, int b) {while(b != 0){int x = a ^ b; // 先算出⽆进位相加的结果 int carry = (a & b) << 1; // 计算进位 a = x;b = carry;}return a;}
}

 

只出现⼀次的数字II(medium)

题目解析

1.题目链接:. - 力扣(LeetCode)

2.题目描述

给你⼀个整数数组nums,除某个元素仅出现⼀次外,其余每个元素都恰出现三次。请你找出并返回那个只出现了⼀次的元素。
你必须设计并实现线性时间复杂度的算法且不使⽤额外空间来解决此问题。
⽰例1:
输⼊:nums=[2,2,3,2]
输出:3
⽰例2:
输⼊:nums=[0,1,0,1,0,1,99]
输出:99
提⽰:
1<=nums.length<=3*104
-231<=nums[i]<=231-1
nums中,除某个元素仅出现⼀次外,其余每个元素都恰出现三次

讲解算法原理

解法(⽐特位计数):
算法思路:
设要找的数位 ret 。
由于整个数组中,需要找的元素只出现了「⼀次」,其余的数都出现的「三次」,因此我们可以根据所有数的「某⼀个⽐特位」的总和 %3 的结果,快速定位到 ret 的「⼀个⽐特位上」的值是0 还是 1 。
这样,我们通过 ret 的每⼀个⽐特位上的值,就可以将 ret 给还原出来。

编写代码

c++算法代码:

class Solution
{
public:
 int singleNumber(vector<int>& nums) 
 {
 int ret = 0;
 for(int i = 0; i < 32; i++) // 依次去修改 ret 中的每⼀位 {
 int sum = 0;
 for(int x : nums) // 计算nums中所有的数的第 i 位的和 if(((x >> i) & 1) == 1)
 sum++;
 sum %= 3;
 if(sum == 1) ret |= 1 << i;
 }
 return ret;
 }
};

java算法代码:

class Solution
{public int singleNumber(int[] nums) {int ret = 0;for(int i = 0; i < 32; i++) // 依次修改 ret 中的每⼀个⽐特位 {int sum = 0;for(int x : nums) // 统计 nums 中所有的数的第 i 位的和 if(((x >> i) & 1) == 1)sum++;sum %= 3;if(sum == 1) ret |= 1 << i;}return ret;}
}

 


http://www.ppmy.cn/embedded/121923.html

相关文章

ST-GCN模型实现花样滑冰动作分类

加入深度实战社区:www.zzgcz.com&#xff0c;免费学习所有深度学习实战项目。 1. 项目简介 本项目实现了A042-ST-GCN模型&#xff0c;用于对花样滑冰动作进行分类。花样滑冰作为一项融合了舞蹈与竞技的运动&#xff0c;其复杂的动作结构和多变的运动轨迹使得动作识别成为一个具…

使用 SSH 连接 Docker 服务器:IntelliJ IDEA 高效配置与操作指南

使用 SSH 连接 Docker 服务器&#xff1a;IntelliJ IDEA 高效配置与操作指南 本文详细介绍了如何在 2375 端口未开放的情况下&#xff0c;通过 SSH 连接 Docker 服务器并在 Idea 中进行开发。通过修改用户权限、生成密钥对以及配置 SSH 访问&#xff0c;用户可以安全地远程操作…

计算机毕业设计python+spark知识图谱音乐推荐系统 音乐数据分析可视化大屏 音乐爬虫 LSTM情感分析 大数据毕设 深度学习 机器学习

《Spark知识图谱音乐推荐系统》开题报告 一、课题背景与意义 随着互联网技术的迅猛发展&#xff0c;音乐资源在网络上呈现爆炸式增长&#xff0c;大型音乐门户类网站的歌曲库规模往往包含上千万首歌曲&#xff0c;这些歌曲被细分为不同的语种、流派、年代、主题、心情和场景等…

Redis实现点赞

部分实体类 TableId(value "id", type IdType.AUTO)private Long id;/*** 商户id*/private Long shopId;/*** 用户id*/private Long userId;/*** 用户图标*/TableField(exist false)private String icon;/*** 用户姓名*/TableField(exist false)private String …

【51单片机】点亮LED之经典流水灯

开发环境 开发板&#xff1a;普中51-单核-A2单片机&#xff1a;STC89C52RC&#xff08;双列直插40引脚 DIP40&#xff09;Keil uVision5 v9.61 最新版破解方法自行百度&#xff0c;相关文档和视频资料很多&#xff0c;我自己将这一操作记录下来当做博客发布&#xff0c;CSDN以…

PHP语言发展历程

PHP是一种开源的服务器端脚本语言&#xff0c;主要用于Web开发&#xff0c;最初由Rasmus Lerdorf在1994年创建。PHP的发展历程如下&#xff1a; PHP的起源&#xff1a;1994年&#xff0c;Rasmus Lerdorf创建了PHP的第一个版本&#xff0c;最初是一套用于跟踪他个人简历访问的C…

360浏览器时不时打不开csdn

从百度或者csdn的搜索中打开&#xff0c;会发现打不开网页&#xff0c;以前也出现过&#xff0c;只是以为这篇文章被删了&#xff0c;昨天接连多个文章打不开&#xff0c;怀疑的浏览器的问题&#xff0c;复制网址到edge浏览器就打开了 刚刚又出现了&#xff0c;怀疑360会拦截某…

linux 查看端口占用

文章目录 查看端口占用使用lsof使用netstat 查看端口占用 使用lsof 可以使用lsof -i:端口号 来查看端口占用情况 lsof -i:8010 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 35653 zhanghe 10u IPv4 0xcac2e413ddf9c5b9 0t0 …