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

目录

消失的两个数字(hard)

题目解析

讲解算法原理

编写代码

替换所有的问号(easy)

题目解析

讲解算法原理

编写代码


消失的两个数字(hard)

题目解析

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

2.题目描述

给定⼀个数组,包含从1到N所有的整数,但其中缺了两个数字。你能在O(N)时间内只⽤O(1)的空间找到它们吗?
以任意顺序返回这两个数字均可。
⽰例1:
输⼊:[1]
输出:[2,3]
⽰例2:
输⼊:[2,3]
输出:[1,4]
提⽰:
nums.length<=30000

讲解算法原理

解法(位运算):
算法思路:
本题就是268.丢失的数字+260.只出现⼀次的数字III组合起来的题。先将数组中的数和 [1, n + 2] 区间内的所有数「异或」在⼀起,问题就变成了:有两个数出
现了「⼀次」,其余所有的数出现了「两次」。进⽽变成了260.只出现⼀次的数字III这道题。

编写代码

c++算法实现:

class Solution
{
public:
 vector<int> missingTwo(vector<int>& nums) 
 {
 // 1. 将所有的数异或在⼀起
 int tmp = 0;
 for(auto x : nums) tmp ^= x;
 for(int i = 1; i <= nums.size() + 2; i++) tmp ^= i;
 // 2. 找出 a,b 中⽐特位不同的那⼀位
 int diff = 0;
 while(1)
 {
 if(((tmp >> diff) & 1) == 1) break;
 else diff++;
 }
 // 3. 根据 diff 位的不同,将所有的数划分为两类来异或 int a = 0, b = 0;
 for(int x : nums)
 if(((x >> diff) & 1) == 1) b ^= x;
 else a ^= x;
 for(int i = 1; i <= nums.size() + 2; i++)
 if(((i >> diff) & 1) == 1) b ^= i;
 else a ^= i;
 return {a, b};
 }
};

java算法代码:

class Solution
{
 public int[] missingTwo(int[] nums) 
 {
 // 1. 先把所有的数异或在⼀起
 int tmp = 0;
 for(int x : nums) tmp ^= x;
 for(int i = 1; i <= nums.length + 2; i++) tmp ^= i;
 // 2. 找出 a,b 两个数⽐特位不同的那⼀位
 int diff = 0;
 while(true)
 {
 if(((tmp >> diff) & 1) == 1) break;
 else diff++;
 }
 // 3. 将所有的数按照 diff 位不同,分两类异或
 int[] ret = new int[2];
 for(int x : nums)
 if(((x >> diff) & 1) == 1) ret[1] ^= x;
 else ret[0] ^= x;
 for(int i = 1; i <= nums.length + 2; i++)
 if(((i >> diff) & 1) == 1) ret[1] ^= i;
 else ret[0] ^= i;
 return ret;
 }
}

 

替换所有的问号(easy)

题目解析

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

2.题目描述

给你⼀个仅包含⼩写英⽂字⺟和'?'字符的字符串s,请你将所有的'?'转换为若⼲⼩写字⺟,使最终的字符串不包含任何连续重复的字符。
注意:你不能修改⾮'?'字符。题⽬测试⽤例保证除'?'字符之外,不存在连续重复的字符。在完成所有转换(可能⽆需转换)后返回最终的字符串。如果有多个解决⽅案,请返回其中任何⼀
个。可以证明,在给定的约束条件下,答案总是存在的。
⽰例1:
输⼊:s="?zs"输出:"azs"
解释:该⽰例共有25种解决⽅案,从"azs"到"yzs"都是符合题⽬要求的。只有"z"是⽆效的修改,因为字符串"zzs"中有连续重复的两个'z'。
⽰例2:
输⼊:s="ubv?w"输出:"ubvaw"
解释:该⽰例共有24种解决⽅案,只有替换成"v"和"w"不符合题⽬要求。因为"ubvvw"和"ubvww"都包含连续重复的字符。

提⽰:
1<=s.length<=100
s仅包含⼩写英⽂字⺟和'?'字符

讲解算法原理

解法(模拟):
算法思路:
纯模拟。从前往后遍历整个字符串,找到问号之后,就⽤ a ~ z 的每⼀个字符去尝试替换即可。

编写代码

c++算法原理:

class Solution
{
public:
 string modifyString(string s) 
 {
 int n = s.size();
 for(int i = 0; i < n; i++)
 {
 if(s[i] == '?') // 替换
 {
 for(char ch = 'a'; ch <= 'z'; ch++)
 {
 if((i == 0 || ch != s[i - 1]) && (i == n - 1 || ch != s[i 
+ 1]))
 {
 s[i] = ch;
 break;
 }
 }
 }
 }
 return s;
 }
};

java算法原理:

class Solution
{
 public String modifyString(String ss) 
 {
 char[] s = ss.toCharArray();
 int n = s.length;
 for(int i = 0; i < n; i++)
 {
 if(s[i] == '?') // 替换
 {
 for(char ch = 'a'; ch <= 'z'; ch++)
 {
 if((i == 0 || ch != s[i - 1]) && (i == n - 1 || ch != s[i 
+ 1]))
 {
 s[i] = ch;
 break;
 }
 }
 }
 }
 return String.valueOf(s);
 }
}

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

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

相关文章

栈的介绍与实现

一. 概念与结构 栈&#xff1a;⼀种特殊的线性表&#xff0c;其只允许在固定的⼀端进⾏插⼊和删除元素操作。进⾏数据插⼊和删除操作的⼀端称为栈顶&#xff0c;另⼀端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out的原则。 压栈&#xff1a;栈的插…

二叉树进阶学习——从前序和中序遍历序列构造二叉树

1.题目解析 题目来源&#xff1a;105.从前序与中序遍历序列构造二叉树——力扣 测试用例 2.算法原理 首先要了解一个概念 前序遍历&#xff1a;按照 根节点->左子树->右子树的顺序遍历二叉树 中序遍历&#xff1a;按照 左子树->根节点->右子树的顺序遍历二叉树 题目…

在 Kali Linux 中安装 Impacket

步骤 1&#xff1a;更新系统 打开终端并确保你的系统是最新的&#xff1a; sudo apt update && sudo apt upgrade -y 步骤 2&#xff1a;安装依赖 在安装 Impacket 之前&#xff0c;你需要确保安装了 Python 和一些必要的依赖。通常&#xff0c;Kali 已经预装了 Pytho…

影刀RPA实战:Excel拆分与合并工作表

1.影刀操作excel的优势 Excel&#xff0c;大家都不陌生&#xff0c;它是微软公司推出的一款电子表格软件&#xff0c;它是 Microsoft Office 套件的一部分。Excel 以其强大的数据处理、分析和可视化功能而闻名&#xff0c;广泛应用于商业、教育、科研等领域。可以说&#xff0…

YOLO11改进|注意力机制篇|引入ELA注意力机制

目录 一、【ELA】注意力机制1.1【ELA】注意力介绍1.2【ELA】核心代码 二、添加【ELA】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【ELA】注意力机制 1.1【ELA】注意力介绍 这篇论文的作者通过分析Coordinate Attention(C…

Java Supplier和Consumer接口

Supplier 在Java中&#xff0c;Supplier接口是一个重要的函数式接口&#xff0c;它属于java.util.function包&#xff0c;Supplier通常用于延迟计算或生成值的场景。Supplier接口是一个泛型接口&#xff0c;其get()方法不接受任何参数但返回一个泛型类型T的值。 这个接口被注解…

STM32新建工程-基于库函数

目录 一、创建一个新工程 二、为工程添加文件和路径 三、创建一个main.c文件&#xff0c;并调试 四、修改一些配置 五、用库函数进行写程序 1、首先加入一些库函数和头文件 2、编写库函数程序 一、创建一个新工程 我这里选择STM32F103C8的型号&#xff0c;然后点击OK。 …

Maven下载、安装与环境配置详解:从零开始搭建高效Java开发环境

下载 官方网站&#xff1a;http://maven.apache.org/ 下载页面&#xff1a;http://maven.apache.org/download.cgi 官网 下载页面 注&#xff1a;本教程使用的是3.3.9版本的maven。 安装 maven安装包下载完成后是一个压缩文件&#xff0c;如下图所示&#xff1a; 我们需要将…

java 数据存储方式

1. 变量存储 这是最基本的数据存储方式&#xff0c;通过声明变量来存储数据。变量可以是基本数据类型&#xff08;如int、float、char等&#xff09;&#xff0c;也可以是引用数据类型&#xff08;如对象、数组等&#xff09;。变量存储的数据通常存储在内存中&#xff0c;随着…

Redis --- 第三讲 --- 通用命令

一、get和set命令 Redis中最核心的两个命令 get 根据key来取value set 把key和value存储进去 redis是按照键值对的方式存储数据的。必须要先进入到redis客户端。 语法 set key value &#xff1a; key和value都是字符串。 对于上述这里的key value 不需要加上引号&#…

【D3.js in Action 3 精译_028】3.4 小节 DIY 实战:使用 Observable 在线绘制 D3 条形图

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…

关于Fake Location定位,运动世界校园问题

不好意思&#xff0c;之前那个文章其实是很早之前的&#xff0c;不知道为什么审核了很久一直没有通过&#xff0c;然后前几周莫名其妙点了一下重新发布&#xff0c;竟然发布成功了&#xff0c;这个方法已经失效了&#xff0c;要可以稳定&#xff0c;我建议是买一台root的手机&a…

Discord:报错:A fatal Javascript error occured(解决办法)

按 Windows 键 R 并输入 %appdata% 选择 discord 文件夹并将其删除。 再次按 Windows 键 R 并输入 %LocalAppData% 选择 discord 文件夹并再次将其删除。 附加&#xff1a; 如果还不行&#xff0c;就通过官网下载吧&#xff0c;这个问题通过epic下载可能会有

初识算法 · 滑动窗口(1)

目录 前言&#xff1a; 长度最小的子数组 题目解析 算法原理 算法编写 无重复长度的最小字符串 题目解析 算法原理 算法编写 前言&#xff1a; 本文开始&#xff0c;介绍的是滑动窗口算法类型的题目&#xff0c;滑动窗口本质上其实也是双指针&#xff0c;但是呢&#…

算法笔记(七)——哈希表

文章目录 两数之和判定是否互为字符重排存在重复元素存在重复元素 II字母异位词分组 哈希表&#xff1a;一种存储数据的容器&#xff1b; 可以快速查找某个元素&#xff0c;时间复杂度O(1)&#xff1b; 当频繁查找某一个数时&#xff0c;我们可以使用哈希表 创建一个容器&#…

YOLOv4和Darknet实现坑洼检测

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝&#xff0c;拥有2篇国家级人工智能发明专利。 社区特色…

插画共享系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;插画信息管理&#xff0c;基础数据管理&#xff0c;论坛管理&#xff0c;公告信息管理&#xff0c;轮播图信息管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;插画信…

【JAVA开源】基于Vue和SpringBoot的服装生产管理系统

本文项目编号 T 066 &#xff0c;文末自助获取源码 \color{red}{T066&#xff0c;文末自助获取源码} T066&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

Vue的基本用法及模板语法

Vue.js使用了基于 HTML 的模板语法&#xff0c;允许开发者声明式地将 DOM 绑定至底层 Vue实例的数据。所有 Vue.js的模板都是合法的 HTML&#xff0c;所以能被遵循规范的浏览器和 HTML 解析器解析。 在底层的实现上&#xff0c;Vue将模板编译成虚拟 DOM 渲染函数。结合响应系…

10.2 Linux_进程_进程相关函数

创建子进程 函数声明如下&#xff1a; pid_t fork(void); 返回值&#xff1a;失败返回-1&#xff0c;成功返回两次&#xff0c;子进程获得0(系统分配)&#xff0c;父进程获得子进程的pid 注意&#xff1a;fork创建子进程&#xff0c;实际上就是将父进程复制一遍作为子进程&…