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

java面试算法汇总-数组

数组

[程序一] 两数之和 :给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer,Integer> map = new HashMap<>();for(int i=0;i<nums.length;i++){if(map.containsKey(target-nums[i])){return new int[]{map.get(target-nums[i]),i};}map.put(nums[i],i);}throw new IllegalArgumentException("no proper answer");}
}

[程序二] 删除有序数组的重复项: 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。

由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。

将最终结果插入 nums 的前 k 个位置后返回 k 。

不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成

一般这种原地修改数组的题多半都考虑用双指针为最优解

class Solution {public int removeDuplicates(int[] nums) {if(nums == null || nums.length ==0) return 0;int p=0,q=1;while(q<nums.length){if(nums[q]!=nums[p]){nums[p+1] = nums[q];p++;}q++;}return p+1;}
}

[程序三] 移除元素:

标签:拷贝覆盖

主要思路是遍历数组 nums,每次取出的数字变量为 num,同时设置一个下标 ans
在遍历过程中如果出现数字与需要移除的值不相同时,则进行拷贝覆盖 nums[ans] = num,ans 自增 1
如果相同的时候,则跳过该数字不进行拷贝覆盖,最后 ans 即为新的数组长度
这种思路在移除元素较多时更适合使用,最极端的情况是全部元素都需要移除,遍历一遍结束即可
时间复杂度:O(n),空间复杂度:O(1)

class Solution {public int removeElement(int[] nums, int val) {int start = 0;for(int num:nums){if(num!=val){nums[start] = num;start++;}}return start;}
}
http://www.lryc.cn/news/36813.html

相关文章:

  • Docker-Mysql主从复制
  • (模拟)1241. 外卖店优先级
  • Linux进程学习【进程地址】
  • 系统调用——文件操作相关函数
  • 做互联网自媒体创业的月薪收入真的能过万吗?
  • Kubernetes (k8s) 污点(Taint)、容忍介绍、示例
  • 多团队协作构建可观测性
  • 100种思维模型之认知资源思维模型-030
  • c/cpp - 多线程/进程 基础
  • 第55章 头像图片的前端渲染显示
  • vue2 使用 cesium 【第二篇-相机视角移动+添加模型】
  • C/C++ 操作ini文件(SinpleIni 跨平台库)
  • Cadence Allegro 导出Design Rules Check(DRC)Report报告详解
  • Java的stream流
  • Mybatis_相关配置解析和ResultMap
  • Python量化入门:利用中长期RSI寻找趋势拐点,抓大放小,蹲一个大机会!
  • 案例14-代码结构逻辑混乱,页面设计不美观
  • 弱监督参考图像分割:Learning From Box Annotations for Referring Image Segmentation论文阅读笔记
  • Linux进程和任务管理和分析和排查系统故障
  • 【满分】【华为OD机试真题2023 JAVA】最多几个直角三角形
  • PyQt5可视化 7 饼图和柱状图实操案例 ②建表建项目改布局
  • sonarqube指标详解
  • 耳机 喇叭接线分析
  • SpaceNet 建筑物检测
  • 蓝桥杯刷题第六天
  • Linux C++ 多线程高并发服务器实战项目一
  • QML ComboBox简介
  • uniapp使用webview嵌入vue页面及通信
  • 深度学习部署笔记(九): CUDA RunTime API-2.1内存管理
  • Idea+maven+spring-cloud项目搭建系列--11-2 dubbo鉴权日志记录数据统一封装