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

【数据结构】_顺序表经典算法OJ(力扣版)

目录

1. 移除元素

1.1 题目描述及链接

1.2 解题思路

1.3 程序

2. 合并两个有序数组

1.1 原题链接及题目描述

1.2 解题思路

1.3 程序


1. 移除元素

1.1 题目描述及链接

原题链接:27. 移除元素 - 力扣(LeetCode)

题目描述:        

        给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
        假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:
        更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
        返回 k。

1.2 解题思路

思路1:

创建新数组,遍历源数组,将不为val的值依次放到新数组中(不满足空间复杂度要求);

思路2:(双指针法)

创建两个变量src与dst作为下标用于遍历数组,若src指向的值为val,则src++;若src指向的值不为val,则令nums[dst]=nums[src],并令src++,dst++;直到src超过数组元素个数时,dst即nums数组的不等于val的个数;

1.3 程序

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;
}

2. 合并两个有序数组

1.1 原题链接及题目描述

原题链接:88. 合并两个有序数组 - 力扣(LeetCode)

题目描述:

        给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
        请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

1.2 解题思路

思路1:

先将num2中的数据依次放入到num1数组有效数据的后面,再用排序算法对num1数组进行排序;

(依赖于排序算法的复杂度)

思路2:(从后往前比大)

创建两个变量l1和l2分别用于从后往前依次遍历数组num1和num2,初始时l1和l2分别指向数组num1和num2最后一个有效元素。再创建变量l3,指向数组num1最后一个元素;

比较num[l1]与num[l2],将较大的赋值给num1[l3],并令其指向的位置前移,直至l2指向位置越出num2界限;

注:对于循环终止条件,若l2先于l1指向数组前而越界,说明num2中元素已全部放置于num1数组中,无需再额外操作;若l1先于l2指向数组前而越界,则说明num2中元素尚未全部放置于num1数组中,仍需进行后续的放置操作;

1.3 程序

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(nums2[l2]>nums1[l1]){nums1[l3]=nums2[l2];l3--;l2--;}else{nums1[l3]=nums1[l1];l3--;l1--;}}// l1<0 or l2<0while(l2>=0){nums1[l3]=nums2[l2];l3--;l2--;}
}

http://www.lryc.cn/news/529774.html

相关文章:

  • 数据结构:队列篇
  • 第05章 17 Contour 过滤器介绍与例子
  • 【落羽的落羽 数据结构篇】顺序表
  • AI编程:如何编写提示词
  • DeepSeek-R1 论文解读 —— 强化学习大语言模型新时代来临?
  • 高阶C语言|深入理解字符串函数和内存函数
  • UE学习日志#17 C++笔记#3 基础复习3
  • 团体程序设计天梯赛-练习集——L1-028 判断素数
  • 从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(基础图形库实现)
  • 创新创业计划书|建筑垃圾资源化回收
  • 反射、枚举以及lambda表达式
  • ROS应用之IMU碰撞检测与接触事件识别
  • docker安装MySQL8:docker离线安装MySQL、docker在线安装MySQL、MySQL镜像下载、MySQL配置、MySQL命令
  • android安卓用Rime
  • 每日一博 - 三高系统架构设计:高性能、高并发、高可用性解析
  • C++ 中的引用(Reference)
  • 负荷预测算法模型
  • 【C语言】内存管理
  • deepseek大模型本机部署
  • 动态规划DP 最长上升子序列模型 拦截导弹(题目分析+C++完整代码)
  • 缩位求和——蓝桥杯
  • Baklib赋能企业实现高效数字化内容管理提升竞争力
  • 【视频+图文讲解】HTML基础2-html骨架与基本语法
  • 消息队列篇--原理篇--常见消息队列总结(RabbitMQ,Kafka,ActiveMQ,RocketMQ,Pulsar)
  • 【力扣每日一题】存在重复元素 II 解题思路
  • React第二十八章(css modules)
  • 本地运行大模型效果及配置展示
  • 愿景:做机器视觉行业的颠覆者
  • arm-linux-gnueabihf安装
  • 力扣动态规划-16【算法学习day.110】