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

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

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.xdnf.cn/news/19454.html

相关文章:

  • 科技信息差(8.30)
  • GLM-Zero:智谱AI最新推出的AI深度推理模型
  • I2C多点触控驱动开发详解
  • shell脚本第五阶段---shell函数与正则表达式
  • 大模型训练中的 logits 是什么
  • react代码分割
  • 算法题(195):点名
  • WorkManager
  • BGP路由协议(四):工作原理
  • 银河麒麟Kylin系统安装各种板卡(反射内存卡、图像注入卡、串口卡等)步骤及解决方案
  • 微服务-ruoyi-cloud部署
  • 直流无刷电机2
  • 网络编程(4)
  • windows系统中安装zip版本mysql,配置环境
  • React学习教程,从入门到精通, ReactJS - 优点与缺点(5)
  • 线段树相关算法题(5)
  • LangGraph结构化输出详解:让智能体返回格式化数据
  • Midjourney绘画创作入门操作创作(广告创意与设计)
  • XHR 介绍及实践
  • 【Game-Infra】游戏开发的流程,游戏发布的打包与构建(硬件选型,SDK与操作系统,包体管理,弹性构建,构建调优)
  • 基于 GME-Qwen2-VL-7B 实现多模态语义检索方案
  • 人工智能学习:Python相关面试题
  • 零基础学C++,函数篇~
  • Visual Studio内置环境变量有哪些
  • MQTT 连接建立与断开流程详解(一)
  • Redission 实现延迟队列
  • Verilog 硬件描述语言自学——重温数电之典型组合逻辑电路
  • 基于 Spring Boot3 的ZKmall开源商城分层架构实践:打造高效可扩展的 Java 电商系统
  • 大语言模型的“可解释性”探究——李宏毅大模型2025第三讲笔记
  • Linux kernel 多核启动