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

数据结构(力扣刷题)

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/19380.html

相关文章:

  • 蜂窝通信模组OpenCPU的介绍
  • REST-assured获取响应数据详解
  • 手写链路追踪优化-自动全局追踪代替局部手动追踪
  • 做一个实用的节假日工具
  • Java面试-spring boot框架
  • 98、23种设计模式之代理模式(7/23)
  • 【SpringMVC】SSM框架【二】——SpringMVC超详细
  • ModuleNotFoundError: No module named ‘cairosvg‘
  • 浔川社团阅读量破历史记录
  • 得物25年春招-安卓部分编程题
  • GD32入门到实战21--输入捕获
  • 【C++】日期类实现详解:代码解析与复用优化
  • C#正则表达式与用法
  • 【基础-单选】关于Tabs组件页签的位置设置,下面描述错误的是
  • 免费在线图片合成视频工具 ,完全免费
  • uni.onBLECharacteristicValueChange接收到数据,返回的value为{}的原因及其获取方法
  • 佳易王钟表维修养护管理系统:开启钟表维修高效管理新篇章​就#软件操作教程
  • Mysql 学习day 2 深入理解Mysql索引底层数据结构
  • React前端开发_Day6-Day9_极客园项目
  • C语言 - 输出参数详解:从简单示例到 alloc_chrdev_region
  • Spring AI 的应用和开发
  • 如何简单建设一个网站,让用户快速找到你。
  • 在PowerPoint和WPS演示让蝴蝶一直跳8字舞
  • Python生成免安装exe
  • SAP PP模块的MPS
  • Vue加载速度优化,verder.js和element.js加载速度慢解决方法
  • 防火墙技术(二):安全区域
  • C#调用c++ dll读取2进制文件时而正常,时而异常
  • 语义分割目前还是研究热点吗?
  • 如何快速了解项目管理基础