当前位置: 首页 > news >正文

数据结构之线性表——LeetCode:67. 二进制求和,27. 移除元素,26. 删除有序数组中的重复项

67. 二进制求和

题目描述

67. 二进制求和

给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

运行代码(java+C++)

class Solution {public String addBinary(String a, String b) {StringBuilder ans=new StringBuilder();int ca=0;for(int i=a.length()-1,j=b.length()-1;i>=0||j>=0;i--,j--){int sum=ca;sum+=i>=0?a.charAt(i)-'0':0;sum+=j>=0?b.charAt(j)-'0':0;ans.append(sum%2);ca=sum/2;}
ans.append(ca==1?ca:"");
return ans.reverse().toString();}
}
class Solution {
public:string addBinary(string a, string b) {string ans;int ca = 0;int i = a.length() - 1;int j = b.length() - 1;while (i >= 0 || j >= 0) {int sum = ca;sum += (i >= 0)? a[i] - '0' : 0;sum += (j >= 0)? b[j] - '0' : 0;ans += to_string(sum % 2);ca = sum / 2;i--;j--;}if (ca == 1) ans += to_string(ca);reverse(ans.begin(), ans.end());return ans;}
};

代码思路

  1. 初始化:定义一个字符串 ans 用于存储最终的二进制和结果。定义变量 ca 作为进位标志,初始值为 0。定义两个指针 i 和 j,分别指向输入字符串 a 和 b 的最后一个字符,即从最低位开始进行加法运算。

  2. 逐位相加

    • 进入循环,条件是 i >= 0 或者 j >= 0,即只要两个字符串中还有未处理的位就继续循环。
    • 计算当前位的和 sum,首先将进位标志 ca 加入,然后如果 i 指针指向的位置有效(即 i >= 0),将字符串 a 中当前位的值(转换为数字)加入 sum;如果 j 指针指向的位置有效(即 j >= 0),将字符串 b 中当前位的值(转换为数字)加入 sum
    • 将 sum 对 2 取余的结果转换为字符串并添加到 ans 中,这就是当前位的结果(0 或 1)。
    • 更新进位标志 ca 为 sum 除以 2 的结果。移动指针 i 和 j 分别向左一位。
  3. 处理进位:循环结束后,如果进位标志 ca 为 1,说明还有一个进位需要添加到结果中,将 ca 转换为字符串并添加到 ans

  4. 反转结果:由于是从低位向高位计算,所以最后需要将结果字符串 ans 反转,得到正确的二进制和。

  5. 返回结果:返回最终的二进制和字符串 ans

27. 移除元素

题目描述

27. 移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。

假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:

  • 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
  • 返回 k

用户评测:

评测机将使用以下代码测试您的解决方案:

int[] nums = [...]; // 输入数组
int val = ...; // 要移除的值
int[] expectedNums = [...]; // 长度正确的预期答案。// 它以不等于 val 的值排序。int k = removeElement(nums, val); // 调用你的实现assert k == expectedNums.length;
sort(nums, 0, k); // 排序 nums 的前 k 个元素
for (int i = 0; i < actualLength; i++) {assert nums[i] == expectedNums[i];
}

如果所有的断言都通过,你的解决方案将会 通过

运行代码

class Solution {
public:int removeElement(vector<int>& nums, int val) {for(auto iter = nums.begin(); iter != nums.end();){if(*iter == val){iter = nums.erase(iter);}else{++iter;}}return nums.size();}
};

代码思路

  1. 遍历数组

    • 使用迭代器 iter 遍历输入的整数向量 nums。从 nums.begin() 开始,一直到 nums.end()
    • 在每次循环中,检查当前迭代器指向的元素是否等于给定的值 val
  2. 删除等于给定值的元素

    • 如果当前元素等于 val,则调用 nums.erase(iter) 来删除该元素。erase 函数会返回一个指向下一个有效元素的迭代器,将其赋值给 iter,以便继续遍历。
    • 如果当前元素不等于 val,则递增迭代器 iter,指向下一个元素。
  3. 返回结果:最后,返回 nums 的大小,即经过删除操作后剩余元素的数量。

26. 删除有序数组中的重复项

题目描述

26. 删除有序数组中的重复项

给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
  • 返回 k 。

判题标准:

系统会用下面的代码来测试你的题解:

int[] nums = [...]; // 输入数组
int[] expectedNums = [...]; // 长度正确的期望答案int k = removeDuplicates(nums); // 调用assert k == expectedNums.length;
for (int i = 0; i < k; i++) {assert nums[i] == expectedNums[i];
}

如果所有断言都通过,那么您的题解将被 通过

运行代码

class Solution {
public:int removeDuplicates(vector<int>& nums) {
int n=nums.size();
if(n==0){return 0;
}
int fast=1,slow=1;
while(fast<n){if(nums[fast]!=nums[fast-1]){nums[slow]=nums[fast];++slow;}++fast;
}return slow;}
};

代码思路

  1. 边界情况处理:首先检查输入向量 nums 的大小是否为 0。如果是,则直接返回 0,表示没有任何元素,也没有不重复的元素。

  2. 初始化指针:定义两个指针 fast 和 slow,分别用于快速遍历整个数组和标记不重复元素的位置。初始时,将 fast 和 slow 都设置为 1,表示从第二个元素开始检查重复情况。

  3. 遍历数组

    • 进入 while 循环,条件是 fast 小于数组的大小 n。这个循环的目的是通过 fast 指针快速遍历整个数组,找到不重复的元素。
    • 在每次循环中,检查当前 fast 指针指向的元素是否与前一个元素(nums[fast - 1])不同。
    • 如果不同,说明找到了一个不重复的元素,将其赋值给 slow 指针指向的位置(nums[slow] = nums[fast]),然后将 slow 指针向后移动一位(++slow)。
  4. 移动指针:无论当前元素是否重复,都将 fast 指针向后移动一位(++fast),继续检查下一个元素。

  5. 返回结果:循环结束后,slow 指针的值表示不重复元素的数量。返回 slow 作为结果,它代表了删除重复元素后数组的新长度。

相关文章:

数据结构之线性表——LeetCode:67. 二进制求和,27. 移除元素,26. 删除有序数组中的重复项

67. 二进制求和 题目描述 67. 二进制求和 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 运行代码&#xff08;javaC) class Solution {public String addBinary(String a, String b) {StringBuilder ansnew StringBuilder();int ca0;for(i…...

SQL_HAVING小例子

例一 求众数的sql语句1&#xff1a; select income,count(*) as cnt from graduates group by income having count(*) > all(select count(*) from graduates group by income);这段SQL语句的作用是从一个名为graduates的表中找出income&#xff08;收入&#xff09;字段…...

Avalonia第三方UI库Semi.Avalonia用法详解

文章目录 简介一、安装Semi Avalonia二、基本项目结构三、使用基本控件1 按钮控件2 输入框控件3 选择框控件四、自定义样式和主题五、使用布局控件六、数据绑定七、事件处理八、使用图标和其他资源九、响应式设计十、交互与导航总结简介 Semi是一个基于Avalonia的UI库,旨在提供…...

宠物智能化听诊器的健康管理!

智能听诊器在宠物健康领域的应用正逐渐普及&#xff0c;它通过创新技术为宠物医疗保健带来革新。以下是智能听诊器如何影响宠物健康管理的概述&#xff1a; 数据分析与机器学习 智能听诊器利用深度学习算法&#xff0c;识别宠物心脏和呼吸模式&#xff0c;提供健康分析和诊断建…...

MyBatis-Plus 实体类注解

MyBatis-Plus 实体类注解详解 MyBatis-Plus 是 MyBatis 的增强版&#xff0c;旨在简化开发者的 CRUD 操作。它通过丰富的特性和注解&#xff0c;简化了数据库与 Java 实体类之间的映射。MyBatis-Plus 提供了一系列的实体类注解&#xff0c;帮助开发者更轻松地映射数据库表、字…...

如何写一个自动化Linux脚本去进行等保测试--引言

#我的师兄喜欢给我的休闲实习生活加活&#xff0c;说是让我在实习期间写一个自动化脚本去进行等保测试。呵呵哒。 怎么办呢&#xff0c;师兄的指令得完成&#xff0c;师兄说让我使用Python完成任务。 设想如下&#xff1a; 1、将Linux指令嵌入到python脚本中 2、调试跑通 …...

美团测开OC!

大家好&#xff0c;我是洋子&#xff0c;最近测试社区里面的一个25届同学参加秋招&#xff0c;已经拿到美团测开offer&#xff0c;今天来分享一下他的求职经历&#xff0c;文末附面经 他求职目前的进展如下&#xff1a; 互联网大厂&#xff1a;字节&#xff0c;阿里&#xff…...

HyperWorks的实体几何创建与六面体网格剖分

创建和编辑实体几何 在 HyperMesh 有限元前处理环境中&#xff0c;有许多操作是针对“实体几何”的&#xff0c;例如创建六面体网格。在创建实体网格的工作中&#xff0c;我们既可以使用闭合曲面创建实体网格&#xff0c;也可以使用完整的实体几何创建实体网格。与闭合曲面相比…...

项目实战:Ingress搭建Nginx+WP论坛+MariaDB

1. 网站架构 本次部署形式完全舍弃 Docker&#xff0c;将所有应用都置于Kubernetes&#xff0c;采用 Deployment 而非单 Pod 部署&#xff0c;稳定性得到升级。 2. 部署 MariaDB [rootk8s-master ~]# mkdir tdr [rootk8s-master ~]# cd tdr/ &#xff08;1&#xff09;定义 …...

UWA支持鸿蒙HarmonyOS NEXT

华为在开发者大会上&#xff0c;宣布了鸿蒙HarmonyOS NEXT将仅支持鸿蒙内核和鸿蒙系统的应用&#xff0c;不再兼容安卓应用&#xff0c;这意味着它将构建一个全新且完全独立的生态系统。 为此&#xff0c;UWA也将在最新版的UWA SDK v2.5.0中支持鸿蒙HarmonyOS NEXT&#xff0c…...

【齐家网-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…...

MyBatis 基本概念

MyBatis 基本概念详解 MyBatis 是一个优秀的持久层框架&#xff0c;它支持定制 SQL、存储过程以及高级映射&#xff0c;用于将 Java 对象与数据库中的记录进行映射。作为 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;MyBatis 的主要优势在于灵活性高&#xff0c;…...

前端开发之装饰器模式

介绍 装饰器模式 是在不修改对象内部结构的情况下&#xff0c;动态地给对象添加功能的一种设计模式。在软件开发中&#xff0c;有时候我们需要为已有对象添加一些额外的行为&#xff0c;但不希望修改该对象的代码&#xff0c;装饰器模式可以很好的满足这一需求。 在TypeScrip…...

【STL】pair 与 map:基础、操作与应用

C 标准库中提供了许多用于处理数据结构的容器和工具。pair 和 map 是两个非常有用的工具&#xff0c;广泛应用于存储和处理关联数据。在本文中&#xff0c;我们将详细介绍 pair 与 map 的相关操作&#xff0c;并结合代码实例为读者提供清晰的理解。 pair&#xff1a;成对数据的…...

深度学习-图像处理篇4VGG网络

CNN感受野...

初级css+初级选择器

一、css基础样式 html: 标签 > 网页骨架 css: 美化这个网页的骨架 >样式去装饰网页 1. css 层叠样式表 (英文全称: Cascading Style Sheets) >修饰网页内容 比如: 文字大小 颜色 网页排版 高宽等等 2. css写在哪里?——行内样式 内部样式 外部样…...

gitlab 的CI/CD (二)

前言 上文完成了gitlab-runner的基础配置及将gitlab的制品上传至软件包库&#xff08;产品库&#xff09;的脚本编写&#xff1b; 本文实现gitlab的ci/cd对远程服务器的操作&#xff1b; 介绍 要让Gitlab Runner部署到远程机器&#xff0c;远程机器必须信任gitlab runner账…...

【html】基础(一)

本专栏内容为&#xff1a;前端专栏 记录学习前端&#xff0c;分为若干个子专栏&#xff0c;html js css vue等 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;js专栏 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &am…...

【网站架构部署与优化】Nginx优化

文章目录 Nginx服务优化一、隐藏Nginx版本号&#xff0c;避免安全漏洞泄漏方法一&#xff1a;通过修改配置文件方法二&#xff1a;通过修改源码并重新编译安装 修改Nginx的用户和组修改用户与组 配置Nginx网页缓存时间配置Nginx连接保持的超时时间KeepAlive模式简介Nginx中的超…...

gitlab修改访问端口

目录 1.找到gitlab.rb文件&#xff0c;一般在/etc/gitlab/路径下 2.打开配置文件&#xff0c;加上代码 3.重新配置 4.重启gitlab 1.找到gitlab.rb文件&#xff0c;一般在/etc/gitlab/路径下 2.打开配置文件&#xff0c;加上代码 打开文件 sudo vi gitlab.rb 加上默认端口配…...

CLIP-GmP-ViT-L-14算力适配:自动检测CUDA版本并加载对应优化内核

CLIP-GmP-ViT-L-14算力适配&#xff1a;自动检测CUDA版本并加载对应优化内核 1. 引言&#xff1a;当高性能模型遇见复杂环境 如果你部署过AI模型&#xff0c;大概率遇到过这样的场景&#xff1a;好不容易把模型跑起来了&#xff0c;却发现速度慢得让人抓狂&#xff0c;或者干…...

从Java到AI Agent:传统后端工程师的下一站,不是学AI,是成为系统工程师!

文章探讨了在AI技术发展的背景下&#xff0c;传统后端工程师的转型方向。作者认为&#xff0c;未来的竞争焦点不再是单纯的技术能力&#xff0c;而是如何将AI技术融入现有系统&#xff0c;构建自动化系统。文章提出了AI Agent工程师的概念&#xff0c;强调系统工程能力的重要性…...

Redis 相关命令详解及其原理

Redis 相关命令详解及其原理 文章目录Redis 相关命令详解及其原理1. Redis 简介2. Redis 安装2.1 包管理器安装2.2 源码编译安装2.4 验证安装3. Redis 基础原理3.1 单线程模型3.2 底层数据结构概述4. 数据类型详解4.1 String&#xff08;字符串&#xff09;底层存储结构常用命令…...

基于IEEE39节点系统的风力发电机组并网改造与稳定性研究

基于IEEE39节点系统的风力发电机组并网改造与稳定性研究 摘要 随着可再生能源在电力系统中占比的不断提升,风电并网技术已成为电力系统领域的研究热点。本文针对IEEE39节点标准测试系统,将其工作频率从60Hz改造为50Hz,并将30、32、34、37号节点的同步发电机分别替换为不同…...

R Markdown网站生成器使用教程:如何快速搭建技术文档网站 [特殊字符]

R Markdown网站生成器使用教程&#xff1a;如何快速搭建技术文档网站 &#x1f4ca; 【免费下载链接】rmarkdown Dynamic Documents for R 项目地址: https://gitcode.com/gh_mirrors/rm/rmarkdown R Markdown是一个强大的动态文档生成工具&#xff0c;能够将代码、输出…...

ConvNeXt 改进 :ConvNeXt添加可变形卷积(DCNv2,CVPR 2018),实现高效涨点,二次创新CNBlock结构 ,独家首发

本文教的是方法,也给出几种改进方法,二次创新结构,百变不离其宗,一文带你改进自己模型,科研路上少走弯路。 前言 DCNv2对原始的DCNv1进行了改进,可变形卷积网络的卓越性能源于其适应对象几何变化的能力。通过对其自适应行为的检查,虽然对其神经特征的空间支持比常规的Co…...

r5:天气预测

- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/o-DaK6aQQLkJ8uE4YX1p3Q) 中的学习记录博客** - **&#x1f356; 原作者&#xff1a;[K同学啊](https://mtyjkh.blog.csdn.net/)** 文章目录 概要整体架构流程代码运行技术名词解释小…...

Alpine Linux在WSL中的生产力配置:zsh美化+Rust环境搭建

Alpine Linux在WSL中的生产力配置&#xff1a;zsh美化Rust环境搭建 在Windows Subsystem for Linux (WSL)生态中&#xff0c;Alpine Linux以其轻量级和安全性逐渐成为开发者的新宠。本文将带你打造一个兼具美观与高效的Alpine开发环境&#xff0c;特别适合追求极简主义又不愿牺…...

批量加密RAR文件超简单!WinRAR自动加密技巧

Rar压缩包是大家经常使用的文件&#xff0c;并且可以进行加密&#xff0c;也是一种文件加密方式&#xff0c;那么当你有很多文件都需要压缩加密&#xff0c;按照正常加密方法来说&#xff0c;我们需要重复操作多次才能实现。其实我们可以使用自动加密功能来完成批量加密。 不过…...

解锁PlotJuggler数据可视化:工业时序数据处理与分析指南

解锁PlotJuggler数据可视化&#xff1a;工业时序数据处理与分析指南 【免费下载链接】PlotJuggler The Time Series Visualization Tool that you deserve. 项目地址: https://gitcode.com/gh_mirrors/pl/PlotJuggler PlotJuggler是一款专业的时序数据可视化工具&#x…...