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

【代码训练营Day01】数组part1

文章目录

  • 数组理论基础回顾
  • 二分查找
  • 移除元素
  • 有序数组的平方

数组理论基础回顾

注意几个重点就行:

  • 一维数组普遍在内存中都是连续分配的
    • 下标从0开始
    • 删除或者增添的时候需要移动其他元素(除了尾元素)
  • 数组元素只能覆盖不会删除
    • 数组内存空间会预分配,不够会走扩容机制,结束会被gc,不会随意的减少分配

二分查找

题目链接:704. 二分查找

算法可视化图解:二分查找原理

双指针法解题思路:

  • 首先初始化前后指针,分别处于列表的两端
  • 将两指针的中间节点作为比较元素(索引相加除2,向下取整)
    • 如果比目标元素大,则将后指针移动到中间节点的前一个位置
    • 如果比目标元素小,则将前指针移动到中间节点的后一个位置
    • 如果与目标元素相同,则找到
  • 如此循环往复直到前后指针位置异常(前指针在后)

以下是结题代码:

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

移除元素

题目链接:27. 移除元素

双指针法解题思路:

  • 首先将双指针都指向表头
    • head指针作为填充指针,从表头开始填充
    • end指针作为遍历指针,遍历数组
  • 开始遍历数组
    • 遇到非移除元素通过head指针填充,然后head指针后移,同时计数
    • 如果是要移除元素,则进入下一次循环
class Solution {public int removeElement(int[] nums, int val) {int head = 0;int count = 0;for (int i = 0; i < nums.length; i++) {if(nums[i] == val) {continue;}nums[head++] = nums[i];count++;}return count;}
}

有序数组的平方

题目链接:977. 有序数组的平方

此题可以暴力排序但并没有双指针法简洁,因为本题是一个有序数组,那么平方之后的最大值只可能在两端出现。

双指针法解体思路:

  • 初始化双指针指向数组的头尾,初始化一个新数组
  • 比较两指针所指元素的平方大小
    • 如果左指针的更大,则将左指针的元素平方填充到新数组,然后左指针右移
    • 如果右指针的更大,则将右指针的元素平方填充到新数组,然后右指针左移
  • 如此循环往复直到左右指针位置异常

代码如下:

class Solution {public int[] sortedSquares(int[] nums) {int head = 0;int end = nums.length -1;int[] result = new int[nums.length];int write = nums.length -1;while(head <= end) {int headNum = (int)Math.pow(nums[head],2);int endNum = (int)Math.pow(nums[end],2);if(headNum >= endNum) {result[write--] = headNum;head++;}else {result[write--] = endNum;end--;}}return result;}
}

相关文章:

  • 解决Window10上IP映射重启失效的问题
  • 如何加载私钥为 SecKeyRef
  • docker部署redis mysql nacos seata rabbitmq minio onlyoffice nginx实战
  • R 语言科研绘图第 52 期 --- 网络图-分组
  • 英一真题阅读单词笔记 17年
  • TDengine 运维——用户和权限
  • 自回归建模模型(AR)
  • JS手写代码篇---Pomise.race
  • 界面控件DevExpress WinForms v24.2新版亮点:富文本编辑器功能全新升级
  • 程序的 “内存舞台”:深入解析虚拟地址空间与内存管理
  • 运维三剑客——grep
  • 简述MySQL优化锁方面你有什么建议?
  • Bug 背后的隐藏剧情
  • flutter常用动画
  • 新能源工厂环境监控系统如何提升电池生产洁净度
  • 直角坐标系下 dxdy 微小矩形面积
  • 服务器关机
  • element-plus bug整理
  • Spring boot 策略模式
  • AI重构SEO关键词精准定位
  • 做网站后端需要什么语言/如何做自己的网站
  • 做网站送优化/手机优化专家
  • 网站策划运营方案/百度指数查询工具app
  • 萍乡建站公司/市场推广方案和思路
  • 建站abc口碑/外链代发软件
  • 网站上传的流程图/企业网站设计模板