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

个人网站的设计与建设论文哈尔滨网站开发制作

个人网站的设计与建设论文,哈尔滨网站开发制作,免费网站建站系统,建设发展集团有限公司2.3 数组相关面试题 原地移除数组中所有的元素val,要求时间复杂度为O(N),空间复杂度为O(1)。OJ链接 力扣OJ链接-移除元素删除排序数组中的重复项。力扣OJ链接-删除有序数组中的重复项合并两个有序数组。力扣OJ链接-合并两个有序数组 2.3.1 移除元素 1…

2.3 数组相关面试题

  1. 原地移除数组中所有的元素val,要求时间复杂度为O(N),空间复杂度为O(1)。OJ链接
    力扣OJ链接-移除元素
  2. 删除排序数组中的重复项。力扣OJ链接-删除有序数组中的重复项
  3. 合并两个有序数组。力扣OJ链接-合并两个有序数组

2.3.1 移除元素

1. 题目描述

力扣OJ链接-移除元素
原地移除数组中所有的元素val,要求时间复杂度为O(N),空间复杂度为O(1)。
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:

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

2. 分析

思路1:另外开辟一个数组,src从头往后遍历,遇到不是要删除元素,就把该元素赋值给数组,直到遍历完整个数组,在最后再把数组赋值到原数组。
在这里插入图片描述

思路2:不另外开辟数组就在原数组进行操作
src从前往后遍历,遇到不等于val的数就赋值给dst
然后src++ ,dst++
src遇到val ,不进行赋值,直接src++,dst不变
直到src遍历完整个数组
在这里插入图片描述

3. 思路2代码实现

int removeElement(int* nums, int numsSize, int val) {int src = 0;int dst = 0;while(src<numsSize){if(nums[src]!= val){nums[dst++] = nums[src++];}else{src++;}}return dst;
}

在这里插入图片描述

2.3.2 删除重复元素

1. 题目描述

力扣OJ链接-删除有序数组中的重复项
给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与nums 的大小不重要。
  • 返回 k 。

2. 思路

这个和上一道题思路非常类似~重点是要分析,这个判断相等如何设置。
在这里插入图片描述

3. 代码实现

int removeDuplicates(int* nums, int numsSize) {int str = 1;int end  = 0;while(str<numsSize){if(nums[str] != nums [end]){nums[++end] = nums[str++];//这里先++,如果后++,就会覆盖原本的值}else{str++;}    }return end+1;
}

进阶写法,虽然代码量更短,但是代码可读性差~

int removeDuplicates(int* nums, int numsSize) {int str = 1;int end  = 0;while(str<numsSize){if(nums[str] != nums [end])nums[++end] = nums[str++];//这里end必须先++,如果后++,就会覆盖原本的值str++;}    return end+1;
}

在这里插入图片描述

2.3.3 合并两个有序数组

1.题目描述

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

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

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

2. 思路

解题思路:
1. 从后往前遍历数组,将nums1和nums2中的元素逐个比较
将较大的元素往nums1末尾进行搬移
2. 第一步结束后,nums2中可能会有数据没有搬移完,将nums2中剩余的元素逐个搬移到nums1
时间复杂度:O(m+n)
空间复杂度: O(1)

两种情况

情况1:
在这里插入图片描述

情况2
在这里插入图片描述

3. 代码实现

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {// end1、end2:分别标记nums1 和 nums2最后一个有效元素位置// end标记nums1的末尾,因为nums1和nums2中的元素从后往前往nums1中存放// ,否则会存在数据覆盖int end1 = m-1;int end2 = n-1;int dst  = m+n-1;//合并后的数组长度是m + n,最后一个元素的位置就是 nums[m+n-1]// 从后往前遍历,将num1或者nums2中较大的元素往num1中end位置搬移// 直到将num1或者num2中有效元素全部搬移完while(end1 >= 0 && end2 >= 0)//有一个小于1 就结束了,循环写的是继续,所以是&&{if(nums1[end1]>nums2[end2]){nums1[dst--] = nums1[end1--];}else{nums1[dst--]= nums2[end2--];}}// num2中的元素可能没有搬移完,将剩余的元素继续往nums1中搬移while(end2 >= 0){nums1[dst--] = nums2[end2--];}}

在这里插入图片描述

http://www.dtcms.com/wzjs/542473.html

相关文章:

  • 机关网站建设建议门户网站建设有哪些界面设计风格
  • 做网站的公司有哪些岗位北京制作网站软件
  • 婚纱摄影网站建站微信公众平台小程序二维码怎么生成
  • 哪里建设网站最好用阿里云网站建设部署与发布
  • 网站维护的主要工作wordpress管理员文件
  • 网站海外推广公司正规免费发布信息平台
  • 企业网站 论文dw可以做h5网站
  • seo网站推广可以自己搞吗视频网站会员系统怎么做
  • 网站点击率查询网站美工的重要性
  • 新手引导做的差的网站物联网应用技术学什么
  • 免费ftp网站wordpress登入界面
  • 网站与网站自动跳转代码郑州网约车官网
  • 网站商城系统建设克隆网站首页做单页站几个文件夹
  • 集团网站制作方案ppt免费申请网站首选百度
  • 做服务的网站起名前端开发就是做网站吗
  • 网站建设费如何会计处理怎么推广视频号
  • 网站开发与系统开发编程教育机构
  • asp.net购物网站模板怀化网站建设联系方式
  • 做网站收获了什么李树全网页制作教程
  • 设计作品网站有哪些郴州排名优化
  • 重庆网站关键词排名网站logo设计思路
  • 门户网站建设 请示网站建设与网页设计开题报告
  • 怎么用自己的网站做链轮网站建设与管理是干嘛的
  • 北京网站sem、seo网站名称和网址
  • 网站开发工具与使用平台jssdk wordpress
  • 开个送快餐网站怎么做江西省赣州市瑞金市
  • 做交易网站需要办什么证做动画人设有哪些网站可以借鉴
  • 网站开发工具排名装修公司店内照片实图
  • 哪个网站可以做微商网络广告主要有哪几种
  • 北京网站制作费用淮安网站建设多少钱