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

数据结构(顺序表力扣刷题)

1.移除元素

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

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

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

(2)返回 k

int removeElement(int* nums, int numsSize, int val) 
{int count =1;while(count == 1){count = 0;for(int i=0;i<numsSize;i++){if(nums[i]==val){for(int j=i;j<numsSize-1;j++){nums[j] = nums[j+1];}numsSize--;count = 1;break;}}}return numsSize;
}

代码主要是通过遍历数组,如果没有雨val相同的值就就执行完全部程序,返回count的值。如果遍历过程中有val相同的值那么就删除(数组没有遍历完需要重新遍历),将count=1,重新遍历,直到遍历结果没有相同的值。
标准答案:双指针,遍历数组,将与val不相同的值按照顺序放到数组中。

int removeElement(int* nums, int numsSize, int val) {if (numsSize == 0) return 0;int k = 0; // 新数组的长度for (int i = 0; i < numsSize; i++) {if (nums[i] != val) {nums[k] = nums[i];k++;}}return k;
}

2.合并两个有序数组

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) 
{int j = 0;for(int i=0;i<n;i++){for(;j<m+i;j++){if(nums1[j]>nums2[i]){for(int k=m+i;k>j;k--){nums1[k] = nums1[k-1];}nums1[j] = nums2[i];break;}}if (j == m + i && m + i < nums1Size) {nums1[m + i] = nums2[i];} }}

代码是通过检测到nums1>nums2,那就将nums1的所有数据全部后移一位,然后将nums2的值插入到nums1中,但是这种编程方式,时间复杂度太大外层的for时间复杂度为o(n),内层就为o(m+i),两者时间复杂度就为o(n*m+n),主导为n*m。

标准答案:

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {int i = m - 1; // nums1 的有效元素索引int j = n - 1; // nums2 的有效元素索引int k = m + n - 1; // nums1 合并结果的索引while (i >= 0 && j >= 0) {if (nums1[i] > nums2[j]) {nums1[k] = nums1[i];i--;} else {nums1[k] = nums2[j];j--;}k--;}while (j >= 0) {nums1[k] = nums2[j];j--;k--;}
}

http://www.dtcms.com/a/359084.html

相关文章:

  • 使用 Visio Viewer 查看 Visio 绘图文件
  • GEE中上传研究区域范围
  • 个性化导航新体验:cpolar让Dashy支持语音控制
  • 仓颉基于http调用DeepSeek
  • 【MySQL数据库】索引 - 结构 学习记录
  • Linux之Shell编程(三)流程控制
  • 知网文献高级检索方法
  • 防护墙技术(一):NAT
  • 如何调整Linux系统下单个文件的最大大小?
  • 2025年09月计算机二级Java选择题每日一练——第十二期
  • 介绍分布式事务之Seata
  • NV032NV037美光固态闪存NV043NV045
  • C++世界的大门——基础知识总结
  • 银河麒麟系统无法打开360浏览器的解决办法以及安装initramfs-tools报错解决方案
  • “HEU-AUTO”无线上网使用指南
  • 【开题答辩全过程】以 基于springboot的户外越野活动管理系统为例,包含答辩的问题和答案
  • 【CUDA进阶】MMA分析Bank Conflict与Swizzle(上)
  • Python 数据分析:计算,分组统计2,df.groupby()和grouped.agg()。听故事学知识点怎么这么容易?
  • 大模型推理显卡对比:Tesla P40 vs Titan RTX vs RTX A3000
  • GaussDB生产扩容引起的PANIC问题处理案例
  • 重叠IO模型
  • MySQL基础理解入门
  • 微服务架构中的 “双保险“:服务保护与分布式事务解决方案实战
  • 执行一条Select语句流程
  • Linux从入门到进阶--第四章--Linux使用操作
  • 深度学习核心损失函数详解:交叉熵、MSE、对比学习(InfoNCE)
  • Linux中的Shell编程 第一章
  • TechPowerUp GPU-Z中文版:专业显卡检测工具
  • 分分合合,门模块方案又兴起了
  • 架构进阶——解读 69页 方法轮IT规划培训 架构-重点-细节【附全文阅读】