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

算法题——数组

704.二分查找

class Solution {public int search(int[] nums, int target) {int left=0;int right=nums.length-1;while(left<=right){int mid=(left+right)/2;if(nums[mid]==target) return mid;else if(nums[mid]>target){right=mid-1;}else{left=mid+1;}}return -1;}
}

二分查找只适用于有序数组,这里要注意循环的边界,以及每次更新边界的值

27.移除元素

 

class Solution {public int removeElement(int[] nums, int val) {int slow=0;int fast=0;for(;fast<nums.length;fast++){if(nums[fast]!=val){nums[slow++]=nums[fast];}}return slow;}
}

大部分数组的题考察的是双指针法甚至是多指针,这里采用快慢指针,快指针用于遍历整个数组,遍历过程中判断其值是否等于val,慢指针用于记录目标数组的索引(这里不要求得到新数组,所以在原数组上赋值即可)

977.有序数组的平方

class Solution {public int[] sortedSquares(int[] nums) {int[] res = new int[nums.length];int left=0;int right=nums.length-1;for(int i=res.length-1;i>=0;i--){int num1 = nums[left]*nums[left];int num2 = nums[right]*nums[right];if(num1 < num2){res[i] = num2;right--;}else{res[i] = num1;left++;}}return res;}
}

 同样是双指针法,这里的思想是碰撞指针,一个指针定义在最左边,一个指针定义在最右边,由于最大的平方数只有可能在两边产生,因此比较二者的较大值,将其赋值给结果数组,注意要从后往前赋值,这样才能保证非递减排序

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

相关文章:

  • Master Prompt:AI时代的万能协作引擎
  • html5和vue区别
  • 使用 Scikit-LLM 进行零样本和少样本分类
  • spring boot 使用mybatis简单连接数据库+连表查询
  • 向量投影计算,举例说明
  • LangChain详解
  • codex体验失败记录
  • Web3.0如何塑造互联网的未来
  • [echarts]基础地图
  • 北极圈金融科技革命:奥斯陆证券交易所的绿色跃迁之路 ——从Visma千倍增长到碳信用衍生品,解码挪威资本市场的技术重构
  • 数据结构(11)栈和队列算法题 OVA
  • 基于OpenCV的cv2.solvePnP方法实现头部姿态估计
  • AJAX快速入门 - 四个核心步骤
  • DB-GPT 0.7.3 版本更新:支持Qwen3 Embedding和Reranker模型、支持知识库自定义检索策略等
  • 从Web2.0到Web3.0:社交参与方式的重塑与延伸
  • 优化算法专栏——阅读导引
  • springboot助农平台
  • 【PHP 类常量详解:从入门到精通】
  • RK3588实现wlan直连
  • Qt 开发 IDE 插件开发指南
  • 如何在UEFI SHELL下查看UEFI Driver
  • 洛谷P4479第K大斜率
  • OSPF笔记整理
  • Transformer架构全解析:搭建AI的“神经网络大厦“
  • 开箱即用的Next.js SSR企业级开发模板
  • 【性能测试】混合业务场景TPS+内存溢出定位分析+调优和分析(详情)
  • 猫眼浏览器:简约安全的 Chrome 内核增强版浏览器
  • 【JVM篇13】:兼顾吞吐量和低停顿的G1垃圾回收器
  • UniappDay06
  • wsl /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.28‘ not found