算法通关村第三关——数组青铜挑战笔记

文章目录

      • 非递减数组增加元素
      • 删除元素
      • 练习


非递减数组增加元素

要注意判断条件以及查找方向的理解。例如本例是非递减数组,若从左往右查找,判断条件应为element < arr[i],若从右往左查找,则判断条件应为element > arr[i]。
且从左往右查找要进行两次遍历,一次查找,一次后移;而从右往左则两次遍历合为一次,判断完一个元素即可后移。原理很简单因为数组没有负下标,0下标不能往左移动了,想两次合为一次只有比较过的元素才能移动。
从左往右查找:

/*** @param arr* @param size    数组已经存储的元素数量* @param element 待插入的元素元素* @return index 返回插入元素所在数组下标*/
public static int addByElementSequence(int[] arr, int size, int element) {// 数组的现有元素个数应小于数组长度,否则无法增加元素if (size >= arr.length) return -1;// 此处 index 初始化不为 0 或 size-1 ,考虑边界问题。比如{3,4,5,8},新增9,若为0则{9,3,4,5,8}。 int index = size;//找到新元素的插入位置for (int i = 0; i < size; i++) {if (element < arr[i]) {index = i;break;}}//元素后移for (int j = size; j > index; j--) {arr[j] = arr[j - 1]; //index下标开始的元素后移一个位置}arr[index] = element;//插入数据return index;
}

从右往左查找,查找移动数组合并版

public static int addByElementSequence(int[] arr, int size, int element) {if (size >= arr.length) return -1;int i = size-1;for (; i >= 0; i--) {if (element >= arr[i]) {arr[i+1] = element; break;}else {arr[i+1] = arr[i]; }}if(i==-1) arr[i+1] = element;//防止 size=0 以及循环结束后 i=-1 的情况。return i+1;
}

删除元素

先查找,若元素存在则删除并移动数组;若不存在,则不动。

public static int removeByElement(int[] arr, int size, int key) {int index = -1;for (int i = 0; i < size; i++) {if (arr[i] == key) {index = i;break;}}if (index != -1) {for (int i = index + 1; i < size; i++)arr[i - 1] = arr[i];size--;}return size;
}

练习

LeetCode 896.判断数组是否单调

class Solution {public boolean isMonotonic(int[] nums) {return isSorted(nums,true) || isSorted(nums,false);}private boolean isSorted(int[] nums, boolean increasing){int l = nums.length;for(int i=0;i<l-1;i++){if(increasing){if(nums[i]>nums[i+1]) return false;}else{if(nums[i]<nums[i+1]) return false;}}return true;}
}

LeetCode 88.合并有序数组

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int pos = m + n - 1;while(m>0 && n>0){nums1[pos--] = nums1[m-1] > nums2[n-1] ? nums1[--m] : nums2[--n];}while(n>0){nums1[pos--] = nums2[--n];}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/25102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【学习笔记】Java安全之反序列化

文章目录 反序列化方法的对比PHP的反序列化Java的反序列化Python反序列化 URLDNS链利用链分析触发DNS请求 CommonCollections1利用链利用TransformedMap构造POC利用LazyMap构造POCCommonsCollections6 利用链 最近在学习Phith0n师傅的知识星球的Java安全漫谈系列&#xff0c;随…

上海首个“零工”就业云平台上线

1.背景 今年6月&#xff0c;黄浦区人社局在建立新业态新职业岗位信息发布机制&#xff0c;挖掘数字经济、电商微商、兼职、共享、远程等新业态岗位的基础上&#xff0c;和人力资源机构携手打造全市首个“新经济、新业态”零工就业云平台。 2. 平台简介 平台上汇聚了新生代互…

Django实现音乐网站 ⑶

使用Python Django框架制作一个音乐网站&#xff0c;在系列文章2的基础上继续开发&#xff0c; 本篇主要是后台单曲、专辑、首页轮播图表模块开发。 目录 后台单曲、专辑表模块开发 表结构设计 单曲表&#xff08;singe&#xff09;结构 专辑表&#xff08;album&#xff0…

K8s集群安全机制(RBAC)

RBAC 基于角色的访问控制

MacBook触控板窗口管理 Swish for Mac

Swish for Mac是一款用于通过手势来控制mac应用窗口的软件&#xff0c;你可以通过这款软件在触控板上进行手势控制&#xff0c;你可以在使用前预设好不同手势的功能&#xff0c;然后就能直接通过这些手势让窗口按照你想要的方式进行变动了 Swish 支持 Haptick Feedback 震动反…

是什么让科大讯飞1个月股价翻倍?

目录 1、讯飞星火认知大模型的特点 2、讯飞星火认知大模型有多强大&#xff1f; 2.1、语言理解方面 2.2、知识问答方面 2.3、逻辑推理方面 2.4、数学题解答方面 2.5、代码理解与编写方面 3、如何使用讯飞星火认知大模型&#xff1f; 4、总结 我关注科大讯飞源于2021年…

接口测试——认知(一)

目录 引言 环境准备 1. 为什么要进行接口测试 2. 什么是接口 3. 接口测试与功能测试的区别 引言 为什么要做接口自动化测试&#xff1f; 在当前互联网产品迭代频繁的背景下&#xff0c;回归测试的时间越来越少&#xff0c;很难在每个迭代都对所有功能做完整回归。 但接…

Java抽象类和接口【超详细】

文章目录 一、抽象类1.1 抽象类概念1.2 抽象类语法1.3 抽象类特性1.4 抽象类的作用 二、接口2.1 接口的概念2.2 语法规则2.3 接口使用2.4 接口特性2.5 实现多个接口2.6 接口间的继承2.7 接口使用实例2.8Clonable 接口和深拷贝2.9 抽象类和接口的区别 一、抽象类 1.1 抽象类概念…

rust怎么解析json数据?

关注我&#xff0c;学习Rust不迷路&#xff01;&#xff01; 在 Rust 中&#xff0c;你可以使用 serde 库来实现结构体与 JSON 之间的互相转换。 serde 是 Rust 社区最常用的序列化和反序列化库&#xff0c;它提供了方便的功能来处理结构体与 JSON 之间的转换。 首先&#xff…

Typescript 第十一章 与JavaScript互操作(外参变量声明,外参类型声明,外参模块声明)

第十一章 与JavaScript互操作 本章讨论在实际开发中如何编写Typescript。有可能你真正把代码从无类型语言向Typescript迁移。也有可能要使用第三方库。 使用类型声明逐步从JavaScript迁移到Typescript使用第三方JavaScript和Typescript 11.1 类型声明 类型声明文件的扩展名…

bash的特性(二)IO重定向与管道

bash的I/O重定向及管道 一、概述 在shell中&#xff0c;最常使用的fd(file descriptor)有三个&#xff0c;标准输入&#xff0c;标准输出&#xff0c;错误输出。进程用文件描述符来管理打开的文件。 名称 文件描述符 标准输入&#xff08;stdin) 0 键盘&#xff0c;也可以…

(十一)大数据实战——hadoop高可用之HDFS手动模式高可用

前言 本节内容我们介绍一下hadoop在手动模式下如何实现HDFS的高可用&#xff0c;HDFS的高可用功能是通过配置多个 NameNodes(Active/Standby)实现在集群中对 NameNode 的热备来解决上述问题。如果出现故障&#xff0c;如机器崩溃或机器需要升级维护&#xff0c;这时可通过此种…

DP-GAN剩余代码

在前面计算完损失后&#xff0c;该进行更新&#xff1a; 1&#xff1a;netEMA是模型的生成器&#xff1a; 遍历生成器的state_dict&#xff0c;将每一个键对应的值乘以EMA_decay。 接着根据当前迭代步数计算num_upd&#xff0c;每1000,2500,10000代倍数就执行一次。 当num…

❤ npm不是内部或外部命令,也不是可运行的程序 或批处理文件

❤ npm不是内部或外部命令,也不是可运行的程序 或批处理文件 cmd或者终端用nvm 安装提示&#xff1a; npm不是内部或外部命令,也不是可运行的程序或批处理文件 原因&#xff08;一&#xff09; 提示这个问题&#xff0c;有可能是Node没有安装&#xff0c;也有可能是没有配置…

ardupilot 中坐标变换矩阵和坐标系变换矩阵区别

目录 文章目录 目录摘要1.坐标变换矩阵与坐标系变换矩阵摘要 本节主要记录ardupilot 中坐标变换矩阵和坐标系变换矩阵的区别,这里非常重要,特别是进行姿态误差计算时,如果理解错误,很难搞明白后面算法。 1.坐标变换矩阵与坐标系变换矩阵 坐标变换矩阵的本质含义:是可以把…

【elementui】解决el-select组件失去焦点blur事件每次获取的是上一次选中值的问题

目录 【问题描述】 【问题摘要】 【分析问题】 【完整Test代码】 【封装自定义指令】 ↑↑↑↑↑↑↑↑↑↑↑↑ 不想看解决问题过程的可点击上方【封装自定义指令】目录直接跳转获取结果即可~~~ 【问题描述】 一位朋友遇到这么一个开发场景&#xff1a;在表格里面嵌入el-…

js-4:BOM是什么?

1、Bom是什么&#xff1f; BOM&#xff08;Browser Object Model&#xff09;&#xff0c;浏览器对象模型&#xff0c;提供了独立于内容与浏览器窗口进行交互的对象&#xff0c;其作用是跟浏览器做一些交互效果&#xff0c;例如如何进行页面的后退&#xff0c;前进&#xff0c;…

CPP17 计算小球走过的路程和反弹高度

描述 一球从 h 米高度自由落下&#xff0c;每次落地后反跳回原高度的一半再落下&#xff0c;求它在第 n 次落地时共经过了多少米&#xff1f;第 n 次返弹多高&#xff1f; 输入描述&#xff1a; 输入小球下落的高度和落地的次数&#xff08;先输入小球初始高度再输入反弹次数…

NetSuite 2023.2 Cash 360 功能更新

大约一年前&#xff0c;Cash 360功能推出。我们写了篇介绍&#xff1a; NetSuite Cash 360_netsuite oneworld数据可以迁移到sap上吗_NetSuite知识会的博客-CSDN博客Cash 360是在SuiteWorld 2021做的预告&#xff0c;本来是要跟着22.1发布出来&#xff0c;但是各种原因导致跳票…

【Kubernetes】当K8s出现问题时,从哪些方面可以排查

前言 kubernetes&#xff0c;简称K8s&#xff0c;是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用&#xff0c;Kubernetes的目标是让部署容器化的应用简单并且高效&#xff08;powerful&#xff09;,Kub…