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

力扣面试经典150题day1第一题(lc88),第二题(lc27)

文章目录

  • 一、lc88 合并两个有序数组
    • O((M+N)Log(M+N))时间复杂度
    • O(M+N)时间复杂度
  • 二、lc27移除元素
    • 添加辅助数组
    • 2.原数组拷贝


一、lc88 合并两个有序数组

O((M+N)Log(M+N))时间复杂度

直接把nums2数组拼接到nums1数组后面,再调用sort函数排序,代码如下,需要注意nums1数组长度为0这个特殊情况

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {if(m==0){for(int i=0;i<n;i++){nums1[i] = nums2[i];}}else{for(int i=0 ; i < n;i++){nums1[m+i] = nums2[i];}Arrays.sort(nums1);}}
}

O(M+N)时间复杂度

逆向考虑问题,设置三个指针i,j,k,分别表示nums1还剩数据长度,nums2还剩数据长度,下一个插入位置,当i,j不为0时,对nums[i-1]和nums2[j-1]进行大小比较,大的插入到nums1[k-1]位置(长度从1开始计算,数组下标从0开始,所以需要减一),再移动i,j,当i,j其中一个插入完毕后循环退出,如果i不为0,表示nums1上还有数据未遍历到,但已经在返回数组上了,不需要额外操作,如果j不为0,遍历nums2剩下的数据插入到nums1前面。

对于从后插入是否会覆盖数据:因为两个数组已经按非递减排序,所以不会

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {if(m==0){for(int i=0;i<n;i++){nums1[i] = nums2[i];}}else{int i=m,j=n,k=m+n;while(i>0 && j>0){if(nums1[i-1]>=nums2[j-1]){nums1[k-1]=nums1[i-1];i--;}else{nums1[k-1]=nums2[j-1];j--;}k--;}if(j>0){for(int s = 0; s<j;s++){nums1[s]=nums2[s];}}}}
}

二、lc27移除元素

添加辅助数组

遍历nums数组,把非val元素放入辅助数组ans中,遍历完成后,把ans数组的数据放回nums数组前面

class Solution {public int removeElement(int[] nums, int val) {int n = nums.length-1;if(n<0) return 0;int k=0;int[] ans = new int[n+1];for(int i = 0;i<=n;i++){if(nums[i]!=val){ans[k]=nums[i];k++;}}if(k>0){for(int i=0;i<k;i++){nums[i]=ans[i];}}return k;}
}

2.原数组拷贝

遍历nums数组,如果取出的num不等于val就进行拷贝,再ans+1,如果相等,继续遍历
此方法本质上为快慢指针,num元素下标为快指针,遍历整个数组,ans为慢指针,为下一个插入非val元素的位置

class Solution {public int removeElement(int[] nums, int val) {int ans = 0;for(int num: nums) {if(num != val) {nums[ans] = num;ans++;}}return ans;}
}

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

相关文章:

  • asp 网站开发 软件做期货主要看哪几个财经网站
  • JavaScript实现防抖、节流【带思路】
  • 汇川高压变频器故障解析F79 F90
  • kanass入门到实战(13) - 如何通过评审,有效保障需求和用例的质量
  • 深度解析:Redis缓存三大核心问题(穿透/击穿/雪崩)的技术原理与企业级解决方案
  • 最专业网站建设哪家好微网站微名片
  • 上海兆越通讯闪耀第二十五届中国国际工业博览会
  • 车库到双子星:惠普的百年科技传奇
  • 网站防止恶意注册dedecms菜谱网站源码
  • 基于IoT的智能温控空调系统设计与实现
  • 网站开发常用的框架营销到底是干嘛的
  • 老题新解|组合数问题
  • Java 工具类详解:Arrays、Collections、Objects 一篇通关
  • Cucumber自学导航
  • docker案例
  • 网站如何做提现功能上海市城乡和住房建设厅网站
  • 南宁 网站建设 公司老吕爱分享 wordpress
  • python 矩阵中寻找就接近的目标值 (矩阵-中等)含源码(八)
  • 嵌入式Linux:线程中信号处理
  • docker启动容器慢,很慢,特别慢的坑
  • C#基础14-非泛型集合
  • 【22.1-决策树的构建1】
  • asp制作网站wordpress使用端口
  • 【机器学习】(一)实用入门指南——如何快速搭建自己的模型
  • 【数值分析】插值法实验
  • 地方门户网站的前途搜索引擎大全全搜网
  • 如何给oracle新建架构(schema)
  • 天地数码携手一半科技PLM 赋能应对全球市场,升级热转印色带研发能力
  • 构筑智能防线:大视码垛机如何重新定义工业安全新标准
  • iPhone17实体卡槽消失?eSIM 普及下的安全挑战与应对