经典问题解答(顺序表)

问题一:移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 1:

输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2]
解释:函数应该返回新的长度 2
, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。

示例 2:

输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,3,0,4]
解释:函数应该返回新的长度为5,前五个元素为0,1,3,0,4
。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

那这个问题我们该如何来思考呢?

这个题我们可以定义两个指针变量,用dst来遍历整个数组,例如:

 接下来我们进行代码实现

int removeElement(int* nums, int numsSize, int val) {int src, dst;src = dst = 0;while (src < numsSize){if (nums[src] == val){src++;}else{nums[dst] = nums[src];src++;dst++;}}return dst;
}int main()
{int nums[] = { 3,2,2,3 };int numsSize = sizeof(nums)/sizeof(nums[0]);int len=removeElement(nums, numsSize,3);for (int i = 0; i < len; i++){printf("%d ", nums[i]);}return 0;
}

总结:这个题主要是让我们在不创建新数组的情况下删除与val相同的数,这时我们就可以通过画图进行分析,创建两个指针我们就能很好的解决问题。

问题二:合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。

请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。

注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

示例 1:

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
解释:需要合并 [1,2,3] 和 [2,5,6] 。
合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。

示例 2:

输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]
解释:需要合并 [1] 和 [] 。
合并结果是 [1] 。

示例 3:

输入:nums1 = [0], m = 0, nums2 = [1], n = 1
输出:[1]
解释:需要合并的数组是 [] 和 [1] 。
合并结果是 [1] 。
注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。

 这个题我们该怎么思考呢?本题我们依然采用先画图来分析

 通过以上分析我们大概知道了思路我们接下来进行代码实现:

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {int l1 = m - 1;int l2 = n - 1;int l3 = m + n - 1;while (l1 >= 0 && l2 >= 0){if (nums1[l1] < nums2[l2]){nums1[l3--] = nums2[l2--];}else{nums1[l3--] = nums1[l1--];}}while (l2 >= 0){nums1[l3--] = nums2[l2--];}}

总结:这个两个体都是与数据结构中的顺序表相关的问题,当我们无法想出答案是我们可以进行画图能使我们很快的解决问题。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DevOpsGPT:一个基于人工智能的软件开发自动化解决方案

DevOpsGPT是一个基于人工智能的软件开发自动化解决方案,旨在通过结合大型语言模型(LLM)和DevOps工具来提高软件开发的效率。它能够将自然语言的需求转化为可工作的软件,从而极大地简化了传统的软件开发流程1 24。DevOpsGPT的核心功能包括提高开发效率、缩短开发周期,并且无…

Mathtype安装

如何将MathType公式编辑器内嵌到WPS工具栏中 这一篇就够了 运行时错误‘53’&#xff1a;文件未找到&#xff1a;MathPage.WLL MathType嵌入到WPS mathtype与wps兼容吗 mathtype怎么加载到wps 2024最新Mathtype如何嵌入Word/WPS使用步骤技巧以及深度操作教程 如果还不行&…

信号处理相关知识

1.序列 2.数字信号的自变量一定是整数&#xff0c;幅度上取值是有限的状态&#xff08;不一定是整数&#xff09;。 3.抽取和插值

【Java开发指南 | 第一篇】类、对象基础概念及Java特征

读者可订阅专栏&#xff1a;Java开发指南 |【CSDN秋说】 文章目录 类、对象基础概念Java特征 Java 是一种面向对象的编程语言&#xff0c;它主要通过类和对象来组织和管理代码。 类、对象基础概念 类&#xff1a;类是一个模板&#xff0c;它描述一类对象的行为和状态。例如水…

[BT]BUUCTF刷题第17天(4.15)

第17天&#xff08;共3题&#xff09; Web [强网杯 2019]高明的黑客 .tar.gz 是 Linux 系统下的压缩包&#xff0c;访问即可下载 打开后有3000多个php文件&#xff0c;通过题解得知需要写Python脚本找出合适的GetShell文件&#xff08;因为每个文件里都会通过system函数执行…

上海计算机学会 2023年10月月赛 乙组T2 社团展示(贪心、思维、二分答案)

第二题&#xff1a;T2社团展示 标签&#xff1a;贪心、思维、二分答案题意&#xff1a;给定 n n n个社团&#xff0c;第 i i i个社团 x i x_i xi​名学生&#xff0c;需要去完成作品。每件作品得有至少 m m m个不同的社团成员合作完成&#xff0c;每个同学只能参与一个作品&am…

【笔试训练】day2

文章目录 1.牛牛的快递代码&#xff1a; 2.最小花费爬楼梯思路&#xff1a;代码&#xff1a; 3.数组中两个字符串的最小距离思路&#xff1a;代码&#xff1a; 1.牛牛的快递 注意一个坑&#xff0c;首先就是加急是总共加5块&#xff0c;不是每千克加5块。 思路呃&#xff0c;没…

安卓apk文件签名

一、环境准备 链接: https://pan.baidu.com/s/1D3WxIL5M5ewyFNTqJzARPw 提取码: pd6w 上篇博文编译的apk文件 1、docker build -t android-build:v1.0.1 . 直接制作镜像 2、docker run -it android-build:v1.0.1 /bin/bash 运行进入容器 指定sdk的路径&#xff0c;然后直接…

计算机网络3——数据链路层1

文章目录 一、介绍1、基础2、内容 二、数据链路层的几个共同问题1、数据链路和帧2、三个基本问题1&#xff09;封装成帧2&#xff09;透明传输3&#xff09;差错检测 三、点对点协议 PPP1、PPP协议的特点1&#xff09;PPP 协议应满足的需求2&#xff09;PPP 协议的组成 2、PPP协…

JS-32-jQuery01-jQuery的引入

一、初识jQuery jQuery是JavaScript世界中使用最广泛的一个库。鉴于它如此流行&#xff0c;又如此好用&#xff0c;所以每一个入门JavaScript的前端工程师都应该了解和学习它。 jQuery是一个优秀的JS函数库。 &#xff08;对BOM和DOM的封装&#xff09; jQuery这么流行&#x…

Leetcode二叉树刷题

给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true public boolean isSymmetric(TreeNode root) {if(rootnull)return true;return compare(root.left,root.right);}public boole…

Emacs之增加/取消输入括号自动匹配(一百三十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

蓝桥杯杂题选做

海盗分金币 题目链接&#xff1a;1.海盗分金币 - 蓝桥云课 (lanqiao.cn) 题解&#xff1a;海盗分金币-Cheery的代码 - 蓝桥云课 (lanqiao.cn) 思路&#xff1a;倒着想就行。 等腰三角形 题目链接&#xff1a;1.等腰三角形 - 蓝桥云课 (lanqiao.cn) 题解&#xff1a;等腰三…

【测试开发学习历程】python常用的模块(中)

目录 5 time模块 5.1、Python中的四种格式的时间&#xff1a; 5.2、time模块中的常用函数 6 I/O流操作 6.1 创建文件 6.2 读取一个文件存入到另外一个文件 6.3 with open as 结构 6.4 open和with open as的区别 7 Excel的操作模块-openpyxl 7.1、新建Excel文件进行读…

读天才与算法:人脑与AI的数学思维笔记01_洛夫莱斯测试

1. 创造力 1.1. 创造力是一种原动力&#xff0c;它驱使人们产生新的、令人惊讶的、有价值的想法&#xff0c;并积极地将这些想法付诸实践 1.2. 创造出在表面上看似新的东西相对容易 1.3. 在遇到偶然间的创造性行为时&#xff0c;都会表现得异…

Vitis HLS 学习笔记--ap_int.h / ap_fixed.h(2)-深度探究

目录 1. 前文回顾 1.1 简单背后的复杂 1.2 复杂性的来源 2. 关键代码 2.1 功能概述 2.2 关系梳理 2.3 理解构造函数二 2.4 理解HLS_CONSTEXPR 2.5 理解const volatile 3. 探究ap_int<8> c&#xff1b;经历了什么 4. 在调试中查看 1. 前文回顾 在《Vitis HLS…

使用 npm 工具高效更新项目依赖包

团队内部会用工具定时检查包的最新版本并通知&#xff0c;以便我们及时跟进社区进展&#xff0c;避免和技术栈出现版本脱节导致无法使用最新特性和优化内容 这里只说明手动查看和更新包的主要几个命令。 npm outdated&#xff1a;检查项目中过时的依赖包及其最新版本。 npm i…

基于Canvas实现的简历编辑器

基于Canvas实现的简历编辑器 大概一个月前&#xff0c;我发现社区老是给我推荐Canvas相关的内容&#xff0c;比如很多 小游戏、流程图编辑器、图片编辑器 等等各种各样的项目&#xff0c;不知道是不是因为我某一天点击了相关内容触发了推荐机制&#xff0c;还是因为现在Canvas…

Hive:posexplode v.s. explode 实现列转行

hive中explode相关的列转行总结 explode explode 的输入只能是 array 或者map格式,按行输出array或map中的元素&#xff0c;比如&#xff1a; select explode(split(1,2,3,,))输出 explode(split(‘1,2,3’, ‘,’))123 -- map explode select explode(map(A,1,B,2,C,3))输…

如何学习敏捷项目管理?这个证书了解一下

当谈及“敏捷管理”时&#xff0c;许多人都能高呼其口号“敏捷迭代&#xff0c;小步快跑”。然而&#xff0c;在实际操作中&#xff0c;我们是否真正把握了敏捷管理的精髓&#xff1f;是否只是空喊口号而未真正实践&#xff1f; 想象这样一个场景&#xff1a;一家公司决定引入…