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

目录

两整数之和(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;
 }
}
相关推荐
Excuse_lighttime3 分钟前
选择排序
java·开发语言·数据结构·算法·排序算法
Excuse_lighttime5 分钟前
插入排序和希尔排序
java·开发语言·数据结构·算法·排序算法
☆cwlulu6 分钟前
一句话总结一种排序算法,精炼
数据结构·算法·排序算法
胡晔可可7 分钟前
数据库中存储时候将字段为空串时转换成null
java·数据库
王老师青少年编程10 分钟前
【如何掌握CSP-J 信奥赛中的排序算法】
c++·算法·排序算法·csp·信奥赛
爱是小小的癌10 分钟前
数据结构与算法之排序算法-快速排序(分治)
java·开发语言·数据结构·算法·排序算法
✿ ༺ ོIT技术༻18 分钟前
剑指offer第2版:搜索算法(二分/DFS/BFS)
数据结构·算法
金融OG24 分钟前
100.13 AI量化面试题:支持向量机(SVM)如何处理高维和复杂数据集?
人工智能·python·算法·机器学习·支持向量机·数学建模·金融
技术小泽37 分钟前
算法基础之排序算法大总结1!!
java·数据结构·后端·算法·排序算法
illus10n_CHOU1 小时前
【项目总结】易到家家政服务平台 —— 派单调度(7)
java·spring boot·后端·学习·设计模式