Java数据结构实现数组(配套习题)

数据结构

数组

  • 一组相同数据类型的集合

特点

  1. 数组在内存中是连续分配的
  2. 创建时要指明数组的大小
  3. 数组名代表首地址,索引从0开始,到数组的长度-1
  4. 数组一旦创建好,大小不可以改变
  5. 使用索引
    1. 获取索引位置的值 arr[index]
    2. 修改 arr[index] = val
    3. 删除 (假删除)
    4. 遍历,将数组中的元素,依次打印出来

使用Java实现更高级的数组

package Arrays;import java.util.Random;public class MyArr<T> {private int capacity = 0;private int size = 0;private T[] arr;public MyArr(int capacity) {if (capacity < 0) this.capacity = 10; //if no right input, we will initial capacity 10this.capacity = capacity;this.arr = (T[]) new Object[capacity];}public int getCapacity() {return capacity;}public int getSize() {return size;}public T[] setCapacity(int capacity) {if (capacity < 0) {throw new RuntimeException("扩大小异常");}this.capacity = capacity;T[] newNum = (T[]) new Object[capacity];for (int i = 0; i < this.size; ++i) {newNum[i] = this.arr[i];}return newNum;}//增加元素public void add(T val) {if (this.size >= this.capacity) {this.arr = setCapacity(2 * this.capacity);}this.arr[this.size++] = val;}//删除元素public boolean removeByIndex(int index) {if (index < 0 || index > this.capacity) {throw new RuntimeException("数组越界");}for (int i = index; i < size - 1; ++i) {arr[i] = arr[i + 1];}size--;if (size < this.capacity / 4 && this.capacity > 4) {arr = setCapacity(this.capacity / 4);}return true;}//修改位置元素public void modify(int index, T val) {if (index < 0 || index > size - 1) {throw new RuntimeException("数组越界");}arr[index] = val;}//获取某元素位置public int locateVal(T val) {for (int i = 0; i < size; ++i) {if (arr[i] == val) {return i;//return index}}// if no find return -1return -1;}//打印元素@Overridepublic String toString() {StringBuffer stringBuffer = new StringBuffer();stringBuffer.append('[');for (int i = 0; i < this.size - 1; ++i) {stringBuffer.append(arr[i] + ",");}if(size>0) stringBuffer.append(arr[size - 1]);stringBuffer.append(']');return stringBuffer.toString();}}

对应习题

26. 删除有序数组中的重复项

class Solution {public int removeDuplicates(int[] nums) {/*    TreeSet<Integer> set = new TreeSet<>();for(int i=0;i<nums.length;i++){set.add(nums[i]);}Iterator<Integer> iterator = set.iterator();int temp=0;while(iterator.hasNext()){nums[temp] = iterator.next();temp++;}return set.size();*///使用双指针,优化/*int p=0;int q = 1;if(nums==null||nums.length==0)return 0;while(q<nums.length){if(nums[p]!=nums[q]){nums[p+1]=nums[q];p++;}q++;}return p+1;*///当数组根本不存在重复元素时,则上面的方法每次依然会进行重复的复制,显然这是没有必要的//再次优化int p=0;int q = 1;if(nums==null||nums.length==0)return 0;while(q<nums.length){if(nums[p]!=nums[q]){if(q-p>1)nums[p+1]=nums[q];//判断p++;}q++;}return p+1;}
}

image-20240117203537713

1. 两数之和

class Solution {public int[] twoSum(int[] nums, int target) {int[] numsSum = new int[2];HashMap<Integer,Integer> hashMap = new HashMap<>();for(int i=0;i<nums.length;++i){if(hashMap.containsKey(target - nums[i])){return new int[]{i, hashMap.get(target - nums[i])};}hashMap.put(nums[i],i);}return null;// int[] numsSum = new int[2];// if(nums==null||nums.length<2)return numsSum;// int len = nums.length;// HashMap<Integer,Integer> hashMap = new HashMap<>();// for(int i=0;i<nums.length;++i){//     hashMap.put(nums[i],i);// }// int temp=0;// for(int i=0;i<nums.length;++i){//     temp = target - nums[i];//     if(hashMap.containsKey(temp)&&hashMap.get(temp)!=i){//         numsSum = new int[]{i, hashMap.get(temp)};//     }// }// return numsSum;}    }

image-20240117203448318

class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:lens = len(nums)dic_num = {}for i in range(0,lens):if(target-nums[i]) in dic_num:return [i,dic_num.get(target-nums[i])]dic_num[nums[i]] = ireturn []

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

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

相关文章

在全志T113-i平台上实现H.265视频解码步骤详解

H.265&#xff0c;也被称为HEVC(HighEfficiency Video Coding)&#xff0c;作为H.264的继任者&#xff0c;提供了更好的视频压缩和更高的视频质。H.265通过引入更多先进的编码技术&#xff0c;如更强大的运动估计和更高效的变换编码&#xff0c;对比H.264进行了改进。这些改进使…

【latex】参考文献排版前移,在最前面引用\usepackage{url}

【LaTeX】参考文献排版前移&#xff0c;在最前面引用\usepackage{url} 写在最前面完整解决步骤请教申申latex编译报错解决方案 写在最前面 参考文献从21开始排版前移了 解决方案&#xff1a;在最前面加一行 \usepackage{url}完整解决步骤 请教申申 申申yyds&#xff01;&am…

Java NIO (一)简介

1 NIO简介 在1.4版本之前&#xff0c;Java NIO类库是阻塞IO&#xff0c;从1.4版本开始&#xff0c;引进了新的异步IO库&#xff0c;被称为Java New IO类库&#xff0c;简称为Java NIO。New IO类库的目的 就是要让Java支持非阻塞IO。 Java NIO类库包含三个核心组件&#xff1a; …

Python 算术运算符:解码数字世界的算术密码

算术运算是计算机编程中最基本和常见的运算之一。在 Python 中&#xff0c;算术运算符提供了一组功能强大的操作符&#xff0c;使得我们能够对数字进行加减乘除等各种数学计算。本文将深入探讨 Python 中的算术运算符&#xff0c;包括常见的算术运算符、使用注意事项以及在实际…

线性回归理论+实战

线性回归 什么是线性回归 3.1. 线性回归 — 动手学深度学习 2.0.0 documentation (d2l.ai) 模型 损失函数 模型拟合&#xff08;fit&#xff09;数据之前&#xff0c;我们需要确定一个拟合程度的度量。 损失函数&#xff08;loss function&#xff09;能够量化目标的实际值…

导入失败,报错:“too many filtered rows xxx, “ErrorURL“:“

一、问题&#xff1a; 注&#xff1a;前面能正常写入&#xff0c;突然就报错&#xff0c;导入失败&#xff0c;报错&#xff1a;“too many filtered rows xxx, "ErrorURL":" {"TxnId":769494,"Label":"datax_doris_writer_bf176078-…

物联网中的通信技术

阅读引言&#xff1a; 本文主要大致为大家带来物联网中的常见的通信方式的知识梳理。 目录 一、概述 二、无线通信技术 1.物联网电子标签 RFID 1.1 RFID 概念 1.2 RFID 系统组成 2.WI-FI技术 3.UWB技术 4.ZigBee技术 5.NFC技术 6.蓝牙技术 7.EnOcean技术 一、概述 物…

【服务器数据恢复】服务器迁移数据时lun数据丢失的数据恢复案例

服务器数据恢复环境&服务器故障&#xff1a; 一台安装Windows操作系统的服务器。工作人员在迁移该服务器中数据时突然无法读取数据&#xff0c;服务器管理界面出现报错。经过检查发现服务器中一个lun的数据丢失。 服务器数据恢复过程&#xff1a; 1、将故障服务器中所有磁盘…

业务开发过程中的思考和实践系列一:自描述软件 DSL

我们知道 80% 的工程师在 80% 的时间都在维护或迭代遗留项目。而绝大部分遗留项目的业务、产品和技术文档都是匮乏的。我遇到的第一个问题就是在文档匮乏的情况下从”Shit Mountain“代码中理清业务逻辑。 在客户端同学协助下&#xff0c;我大概定位到新需求涉及的几个 API 接…

SpringBoot+MybatisPlus+dynamic-datasources实现连接Postgresql和mysql多数据源

场景 dynamic-datasource-spring-boot-starter实现动态数据源Mysql和Sqlserver&#xff1a; dynamic-datasource-spring-boot-starter实现动态数据源Mysql和Sqlserver_dynamic-datasource-spring-boot-starter mysql sqlse-CSDN博客 SpringBoot中整合MybatisPlus快速实现Mys…

利用docker的LNMP

目录 服务器环境 任务需求 服务搭建 Nginx Mysql Php 启动 wordpress 服务 服务器环境 容器 操作系统 IP地址 主要软件 nginx CentOS 7 172.20.0.10 Docker-Nginx mysql CentOS 7 172.20.0.20 Docker-Mysql php CentOS 7 172.2…

Docker ubuntu apt-get更换国内源解决Dockerfile构建速度过慢

1. 问题 dockerfile中 使用ubuntu 镜像 执行 RUN apt-get -q update && apt-get -q install -y 更新巨慢 2. 解决 使用国内的镜像源即可解决问题&#xff0c;注意如果使用的 包比较冷门 或者国内镜像网站没同步过来 可能就下载不到镜像 在dockerfile中 执行安装包命…

YoloV8改进策略:Agent Attention|Softmax与线性注意力的融合研究|有效涨点|代码注释与改进|全网首发(唯一)

摘要 涨点效果:在我自己的数据集上,mAP50 由0.986涨到了0.991,mAP50-95由0.737涨到0.753,涨点明显! 本文提出了一种新型的注意力机制——Agent Attention,旨在平衡计算效率和表示能力。该机制在传统的注意力模块中引入了额外的agent tokens A,这些agent tokens首先为q…

详解ISIS动态路由协议

华子目录 前言应用场景历史起源ISIS路由计算过程ISIS的地址结构ISIS路由器分类ISIS邻居关系的建立P2PMA ISIS中的DIS与OSPF中DR的对比链路状态信息的交互ISIS的最短路径优先算法&#xff08;SPF&#xff09;ISIS区域划分ISIS区域间路由访问原理ISIS与OSPF的不同ISIS与OSPF的术语…

[HarmonyOS]第一课:从简单的页面开始

判断题 1. 在Column容器中的子组件默认是按照从上到下的垂直方向布局的&#xff0c;其主轴的方向是垂直方向&#xff0c;在Row容器中的组件默认是按照从左到右的水平方向布局的&#xff0c;其主轴的方向是水平方向。 答&#xff1a;正确(True) 2. List容器可以沿水平方向排列…

iOS和安卓端个人踩坑史

本公司不提供测试机&#xff0c;借手机是开发测试中最麻烦的事 iOS可行组 1、iOS可以播放视频无声音&#xff0c;Andorid有声音 当时做了个远程视频连接项目&#xff0c;使用了jitsi第三方视频服务&#xff0c;iOS没有加dom.play()导致无法接收声音 2、iOS可以长按保存图片…

Asp .Net Core 系列:集成 Ocelot+Consul实现网关、服务注册、服务发现

什么是Ocelot? Ocelot是一个开源的ASP.NET Core微服务网关&#xff0c;它提供了API网关所需的所有功能&#xff0c;如路由、认证、限流、监控等。 Ocelot是一个简单、灵活且功能强大的API网关&#xff0c;它可以与现有的服务集成&#xff0c;并帮助您保护、监控和扩展您的微…

如何安装下载激活MathType?2024最新免费MathType许可证

第一步&#xff1a;请先从这里下载安装MathType&#xff1a; 第二步&#xff1a;下载完成后&#xff0c;双击下载的MathType Desktop安装程序文件。 在Mac上&#xff0c;这将在单独的窗口中打开它&#xff0c;因此在该窗口中双击“ MathType Desktop Installer…”以运行安装…

TQ7.2WS acid,Tide Quencher 7.2WS 酸,能够降低荧光信号的强度

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;Tide Quencher 7.2WS acid&#xff0c;TQ7.2WS acid&#xff0c;Tide Quencher 7.2WS 酸 &#xff0c;TQ7.2WS 酸 一、基本信息 产品简介&#xff1a;The fluorescence quenching agent Tide Quencher 7.2WS acid h…

win10 系统维护

电脑崩溃之后&#xff0c;我发现维护系统还是很重要的一件事情。比如软件尽可能装D盘&#xff0c;C盘&#xff08;系统盘&#xff09;尽可能不要存储数据等等。接着&#xff0c;就是如何让系统更易用&#xff0c;因此我在这里分享我的使用方式&#xff0c;以后就可以随便重装系…