数据结构之线性表——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 作为结果,它代表了删除重复元素后数组的新长度。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

四川财谷通信息技术有限公司与抖音小店的深度合作

在数字经济蓬勃发展的今天&#xff0c;电商平台已成为推动社会经济增长的重要引擎。其中&#xff0c;抖音小店作为短视频与电商深度融合的产物&#xff0c;凭借其庞大的用户基础、精准的流量分发机制以及创新的购物体验&#xff0c;迅速崛起为电商领域的一股不可忽视的力量。而…

CSS的表格属性

border属性 规定CSS表格边框。 table,td{border: 1px solid green;/*1px表示设置边框的大小&#xff0c;solid表示边框为实线&#xff0c;green表示边框的颜*/} border-collpapse属性 设置表格的边框是否被折叠成一个单一的边框或隔开。 table{border-collapse: collapse;} wi…

[spring]springboot日志

文章目录 一. 日志的用途二. 打印日志三. 日志框架门面模式(外观模式)SLF4J框架介绍 四. 日志格式日志级别配置日志级别日志持久化配置日志文件分割配置日志格式 五. 更简单的日志输出 一. 日志的用途 二. 打印日志 得到日志对象: 需要使用日志工厂LoggerFactory RestControl…

【避雷指南】自学AI人工智能常踩的4个大雷区

1、数学基础 学习人工智能时&#xff0c;有一种常见的误解&#xff0c;认为一定要数学学的很好&#xff0c;才能进一步学人工智能。这种观念并不正确。虽然数学是AI的基石&#xff0c;为算法和模型提供了理论基础&#xff0c;但过分沉迷于数学理论可能会让学习过程变得枯燥无味…

【第十二章:Sentosa_DSML社区版-机器学习之回归】

目录 12.1 线性回归 12.2 决策树回归 12.3 梯度提升决策树回归 12.4 保序回归 12.5 XGBoost回归 12.6 随机森林回归 12.7 广义线性回归 12.8 LightGBM回归 12.9 因子分解机回归 12.10 AdaBoost回归 12.11 KNN回归 12.12 高斯过程回归 12.13 多层感知机回归 【第十…

UML类图绘制

目录 前言 一、如何在UML中表示一个类 二、类之间关系的表示 1.继承关系 2.关联关系 ①单向关联 ②双向关联关系 ③自关联关系 3.聚合关系 4.组合关系 5.实现关系 6.依赖关系 前言 在学习面向对象语言时&#xff0c;我们可以使用UML类图来描述将要编写的程序中类与…

NASA:A-Train 云分级数据集(用于深度学习模型)

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 A-Train 云分级数据集 简介 ATCS 是一个数据集&#xff0c;旨在训练深度学习模型&#xff0c;以便对多角度卫星图像中的云进行体积分割。 该数据集包括来自 PARASOL 任务上 POLDER 传感器的多角度偏…

docker如何升级MySQL为最新版本

今天安全扫描发现MySQL存在漏洞&#xff0c;不用想别的升级到最新版。本篇文章有两个目的&#xff0c;1&#xff09;为自己做一个记录&#xff0c;下次升级的时候不用再浪费时间查资料&#xff1b;2&#xff09;给大家一点帮助&#xff1b; 因为我是docker部署&#xff0c;所以…

在Windows系统上安装的 flatbuffers C++ 库

步骤一 下载:https://github.com/google/flatbuffers git clone gitgithub.com:google/flatbuffers.git步骤二 打开安装目录,然后再打开该目录下的powershell, 新建build目录 cd build cmake ..步骤三 进入步骤二生成的build目录里面,点击FlatBuffers.sln,打开vs2019 补充…

【巅峰算力,静谧之作】4卡4090GPU深度学习“静音”服务器

各位同仁&#xff0c;随着人工智能浪潮的汹涌澎湃&#xff0c;我们正步入一个前所未有的创新纪元。在这个充满挑战与机遇的时代&#xff0c;我愈发频繁地在工作场景中邂逅那些致力于深度学习探索的智者们。他们&#xff0c;对计算力的渴望如同对知识的追求一般&#xff0c;永无…

阿里巴巴首页pc端1688店铺招牌店铺装修教程

1688运营1688批发首页1688装修模板1688店铺怎么装修模板自定义装修代码1688店铺装修模板旺铺装修阿里店铺首页怎么装修1688店铺装修教程视频全屏通栏代码1688店铺装修模板阿里巴巴店铺装修设计 阿里巴巴首页pc端1688店铺招牌店铺装修教程 工具&#xff1a;一秒美工

海外仓与前置仓有什么不同,如何选择合适的WMS系统?

在跨境电商和国际贸易的广阔舞台上&#xff0c;海外仓与前置仓作为两种重要的物流模式&#xff0c;各自以其独特的运营方式和目标&#xff0c;为卖家和消费者提供了高效、便捷的物流服务。 1.海外仓&#xff1a;海外仓是在国外设立的存储仓库&#xff0c;主要用于存放货物并服…

【WRF工具】WRF Domain Wizard第二期:服务器中下载及安装

【WRF工具】WRF Domain Wizard第二期&#xff1a;服务器下载及安装 准备WRF Domain Wizard下载及安装WRF Domain Wizard下载WRF Domain Wizard安装添加环境变量&#xff08;为当前用户永久添加环境变量&#xff09;Java环境安装报错-Exception in thread "main" java…

从入门到精通:Spring Boot 100个技术关键词

Spring Boot 是一个基于Spring框架的快速开发框架&#xff0c;旨在简化Spring应用的初始搭建以及开发过程。通过掌握本指南中的100个关键技术关键词&#xff0c;你将逐步了解Spring Boot的核心概念、自动配置、依赖管理、Web开发、数据库操作、安全性、测试等方面的知识。每个关…

【通俗易懂介绍OAuth2.0协议以及4种授权模式】

文章目录 一.OAuth2.0协议介绍二.设计来源于生活三.关于令牌与密码的区别四.应用场景五.接下来分别简单介绍下四种授权模式吧1.客户端模式1.1 介绍1.2 适用场景1.3 时序图 2.密码模式2.1 介绍2.2 适用场景2.3时序图 3.授权码模式3.1 介绍3.2 适用场景3.3 时序图 4.简化模式4.1 …

从视觉到现实:掌握计算机视觉技术学习路线的十大步骤

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于【计算机视…

北京未来感知科技定位技术:UWB定位技术详解

一、UWB定位技术是什么&#xff1f; UWB&#xff0c;全称为Ultra Wide Band&#xff08;超宽带&#xff09;技术&#xff0c;是一种无线载波通信技术[1][2]。它不同于传统的无线通信技术&#xff0c;不采用正弦载波&#xff0c;而是利用纳秒级的非正弦波窄脉冲传输数据&#x…

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【上篇】

【STM32开发笔记】移植AI框架TensorFlow【上篇】 一、TFLM是什么&#xff1f;二、TFLM开源项目2.1 下载TFLM源代码2.2 TFLM基准测试说明2.3 TFLM基准测试命令 三、TFLM初步体验3.1 PC上运行Keyword基准测试3.2 PC上运行Person detection基准测试3.3 No module named numpy问题解…

【Go】探索Go语言中的Map

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

SpringBoot整合InfluxDB(实战)

一、简单介绍InfluxDB是什么&#xff1f; InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成&#xff0c;着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据&#xff0c;IoT行业的实时数据等场景。 1、主要特点 时间序列数据存储 专门…