一起学算法(顺序表篇)

概念:

1.顺序表的定义

       用一段地址连续的存储单元依次存储数据的线性表被称为数据表,在Java中顺序表一般是数组或者是ArrayList实现的

先把代码放这里,接下来一一给大家进行讲解:

public class SeqList {private Object[] data;  // 用数组存储元素private int size;       // 当前元素个数public SeqList(int capacity) {data = new Object[capacity];size = 0;}// 在末尾添加元素public void add(Object element) {if (size >= data.length) {// 扩容Object[] newData = new Object[data.length * 2];System.arraycopy(data, 0, newData, 0, data.length);data = newData;}data[size] = element;size++;}// 在指定位置插入元素public void insert(int index, Object element) {if (index < 0 || index > size) {throw new IndexOutOfBoundsException("Index out of range");}if (size >= data.length) {// 扩容Object[] newData = new Object[data.length * 2];System.arraycopy(data, 0, newData, 0, index);System.arraycopy(data, index, newData, index + 1, size - index);data = newData;} else {System.arraycopy(data, index, data, index + 1, size - index);}data[index] = element;size++;}// 删除指定位置的元素public void remove(int index) {if (index < 0 || index >= size) {throw new IndexOutOfBoundsException("Index out of range");}System.arraycopy(data, index + 1, data, index, size - index - 1);size--;data[size] = null;  // 将最后一个元素置为 null,方便垃圾回收}// 获取指定位置的元素public Object get(int index) {if (index < 0 || index >= size) {throw new IndexOutOfBoundsException("Index out of range");}return data[index];}//给定target,返回其索引public int findIndex(int target){int index=-1;for(int i=0;i<data.length;i++){if(data[i]==target){index=i;
}}return index;}// 获取顺序表的大小public int size() {return size;}// 判断顺序表是否为空public boolean isEmpty() {return size == 0;}
}

2.顺序表的遍历

1.遍历的含义

对顺序表的元素进行一次访问的过程被称为遍历

2.动画演示

 黄色代表第一个被遍历的元素,紫色代表已经遍历的元素,红色代表正在遍历的元素

3.代码实现

public void traversal(int[] num){for(int i=0;i<num.length;i++){//获取对应索引上的元素值int m=num[i];
}
}

3.顺序表的调试

1.调试的含义

调试的含义就是通过一些可视化的方式将顺序表打印出来,利用遍历的方式就可以实现

2.动画演示

 3.代码实现

 public static void main(String[] args) {int[] num={2,5,6,4,9,6};for(int i=0;i<num.length;i++){System.out.print(num[i]);}}

4.顺序表元素的索引

1.索引的含义

顺序表的索引就是给定一个下标i,通过下标进行数据访问的过程

2.动画演示

 黄色的部分就代表这个顺序表的第6个元素,因为索引是从0开始的,所以num[5]就可以取到这个值

3.代码实现

   // 获取指定位置的元素public Object get(int index) {if (index < 0 || index >= size) {throw new IndexOutOfBoundsException("Index out of range");}return data[index];}

由于顺序表元素存储在连续的内存空间中,所以通过下标进行访问,其中[i]代表了第i+1个元素,调用时需要注意i的取值,必须为非负整数且小于数组的最大长度,查找的时间复杂度是O(1)

5.顺序表元素的查找

1.插入的含义

给定的一个位置k和插入的元素,将它插到顺序表的第k个位置上,并且将后面的元素依次往后移动

2.动画演示

 插入元素必然导致顺序表元素的后移,最后将需要插入的元素赋值给对应位置的元素

3.代码实现

    // 在指定位置插入元素public void insert(int index, Object element) {if (index < 0 || index > size) {throw new IndexOutOfBoundsException("Index out of range");}if (size >= data.length) {// 扩容Object[] newData = new Object[data.length * 2];System.arraycopy(data, 0, newData, 0, index);System.arraycopy(data, index, newData, index + 1, size - index);data = newData;} else {System.arraycopy(data, index, data, index + 1, size - index);}data[index] = element;size++;}

       如果索引越界直接抛出异常,如果数组已经没有空余位置,直接进行扩容,如果原数组中还有空余的位置,对原数组的index~最后 移动到index+1~最后,将索引index对应的位置空出来,然后将插入元素填入index位置上,这就完成了插入操作

6.顺序表元素的删除

1.删除的含义

给定一个位置k,代表需要删除的元素,将它进行删除,并且将后面的元素往前移动

2.动画演示

 3.代码实现

    // 删除指定位置的元素public void remove(int index) {if (index < 0 || index >= size) {throw new IndexOutOfBoundsException("Index out of range");}System.arraycopy(data, index + 1, data, index, size - index - 1);//左闭又开size--;data[size] = null;  // 将最后一个元素置为 null,方便垃圾回收}

7.顺序表的查找

1.查找的含义

通过遍历顺序表找到和给定data相等的元素并返回它的下标

2.动画的演示

 3.代码实现

  //给定target,返回其索引public int findIndex(int target){int index=-1;for(int i=0;i<data.length;i++){if(data[i]==target){index=i;
}}return index;}

8.顺序表的修改

1.修改的含义

通过查找到顺序表的下标并对给定位置的元素进行修改

2.动画演示

 3.代码实现

public void update(int i,int val){data[i]=val;
}

leetcode题单:

拿硬币

class Solution {public int minCount(int[] coins) {if(coins==null||coins.length==0){return 0;}int count=0;for (int i = 0; i <coins.length; i++) {count+=(coins[i]&1)==0?(coins[i]/2):((coins[i]/2)+1);}return count;}
}

K个元素的最大和

class Solution {public int maximizeSum(int[] nums, int k) {if(nums==null||nums.length==0){return 0;}int ans=0;//执行k次循环while(k!=0){//保存最大值的下标int maxIndex=0;for(int i=0;i<nums.length;i++){if(nums[i]>nums[maxIndex]){maxIndex=i;        }}ans+=nums[maxIndex];nums[maxIndex]+=1;k--;}return ans;}
}

数组元素和与数字和的绝对差

class Solution {public int differenceOfSum(int[] nums) {int sum=Arrays.stream(nums).sum();int sum1=0;for(int item:nums){int n=item/10;if(n==0){sum1+=item;continue;}if(n>0){while(item!=0){sum1+=item%10;item=item/10;}}}return Math.abs(sum-sum1);}
}

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

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

相关文章

网络基础-认识每层的设备和每层的特点用途

目录 网络层次常见设备各层介绍数据链路层网络层传输层应用层 网络层次 常见设备 各层介绍 数据链路层 有了MAC地址。数据链路层工作在局域网中的&#xff0c;以帧为单位进行传输和处理数据。 网络层 网络层有了IP。不同的网络通过路由器连接成为互联网 路由器的功能:   …

如何用C#实现上位机与下位机之间的Wi-Fi通信?

有IP协议支持的话用UDP报文或者TCP直接发IP地址和端口不行么&#xff1f;你说的WiFi难道是2.4GHz频率模块那种东东&#xff1f; 你既然用了wifi&#xff0c;那么只要上位机和下位机的对应wifi网卡都具有ip地址以及其协议支持&#xff0c;那么和网络编程没啥子明显区别的吧………

pycharm制作柱状图

Bar - Bar_rotate_xaxis_label 解决标签名字过长的问题 from pyecharts import options as opts from pyecharts.charts import Barc (Bar().add_xaxis(["高等数学1&#xff0c;2","C语言程序设计","python程序设计","大数据导论",…

【13】STM32·HAL库-正点原子SYSTEM文件夹 | SysTick工作原理、寄存器介绍 | printf函数使用、重定向

目录 1.sys文件夹介绍&#xff08;掌握&#xff09;2.deley文件夹介绍&#xff08;掌握&#xff09;2.1deley文件夹函数简介2.2SysTick工作原理2.3SysTick寄存器介绍2.4delay_init()函数&#xff08;F1&#xff09;2.5delay_us()函数&#xff08;F1&#xff09;2.6delay_ms()函…

十大排序|十大排序

稳定排序&#xff1a;冒泡排序、插入排序、归并排序、基数排序、桶排序 不稳定排序&#xff1a;选择排序、快速排序、希尔排序、堆排序 二、插入排序&#xff1a; 代码&#xff1a; #include<iostream> #include<cstdio> #include<stdlib.h> #include<ve…

NLP实战9:Transformer实战-单词预测

目录 一、定义模型 二、加载数据集 三、初始化实例 四、训练模型 五、评估模型 &#x1f368; 本文为[&#x1f517;365天深度学习训练营]内部限免文章&#xff08;版权归 *K同学啊* 所有&#xff09; &#x1f356; 作者&#xff1a;[K同学啊] 模型结构图&#xff1a; &a…

Apikit 自学日记:API 异常监控-创建 API 监控

如何在apikit中&#xff0c;创建 API 监控呢&#xff1f; 创建并开启监控API 一、手动创建监控API Eolink API 网络监控平台支持从 Eolink API Management&#xff08;API管理产品&#xff09;中导入API信息&#xff0c;或者手动创建监控API。 进入API监控页面&#xff0c;点击…

个人中心 - 实现修改用户头像、用户名或密码

目录 1. 修改用户头像 1.1 获取原来的用户头像和用户名 1.2 实现保存头像 2. 修改用户名或密码 1. 修改用户头像 本文是针对之前的一篇项目博客 - 博客系统 做的一个扩展功能. 1.1 获取原来的用户头像和用户名 想要修改头像, 那么就得先获取数据库中原来的头像, 此处顺便…

mysql进阶-修改linux服务器中MySQL的字符集

1.背景 linux中mysql8默认的字符集是latin1&#xff0c;在插入中文时会报错&#xff0c;所以一般在配置好mysql时需要修改字符集为utf8【又叫utfmb3,一般开发够用&#xff0c;一个字符用3个字节表示】或者utfmb4【一个字符用4个字节表示&#xff0c;如果存储emoji表情&#xf…

容器部署jenkins定时构建于本地时间不一致

1. Dockerfile FROM jenkins/jenkins:2.411-jdk11 USER root #以下生成密钥方式为旧格式&#xff0c;因为新格式暂不能被"Publish over SSH--->Jenkins SSH Key"功能识别 RUN ssh-keygen -q -m PEM -t rsa -b 2048 -N -f /root/.ssh/id_rsa ADD ./apache-maven…

【uniapp】实现买定离手小游戏

前言 最近玩了一个小游戏&#xff0c;感觉挺有意思&#xff0c;打算放进我的小程序【自动化小助手】里面&#xff0c;“三张押一张&#xff0c;专押花姑娘&#xff01;”&#xff0c;从三张卡牌&#xff0c;挑选一张&#xff0c;中奖后将奖励进行发放&#xff0c;并且创建下一…

减轻 PWM 的滤波要求

经典脉宽调制器 (PWM) 发出 H 个连续逻辑高电平&#xff08;1&#xff09;&#xff0c;后跟 L 个连续逻辑低电平&#xff08;0&#xff09;的重复序列。每个高电平和低电平持续一个时钟周期 T 1/F (Hz)。结果的占空比可定义为 H/N&#xff0c;其中 N HL 时钟周期。N 通常是 2…

【面试】某公司记录一次面试题

文章目录 框架类1. Spring boot与 spring 架相比&#xff0c;好在哪里?2. Spring boot以及 Spring MVC 常用注解(如requestingMapping&#xff0c;responseBody 等)3. 常用的java 设计模式&#xff0c;spring 中用到哪些设计模式4. SpringIOC是什么&#xff0c;如何理解5. AOP…

设计模式之外观模式

外观模式 本质&#xff1a; 封装交互&#xff0c;简化调用 何时使用外观模式 相关模式 外观模式经典代码&#xff1a; package com.tao.design.facade;/*** projectName: DesignMode* package: com.tao.design.facade* className: ServiceA* author: TT_Hugo* description…

替换linux的文泉驿正黑fonts-wqy-zenhei字体 替换linux默认中文字体

WSL 怎么替换 linux 的文泉驿正黑 fonts-wqy-zenhei 字体 WSL 怎么替换 linux 默认中文字体 在 wsl 中默认是没有 gnome 界面或者 xface 的&#xff0c;但是我需要使用 wsl 开发 electron 或者使用 chrome 浏览器。这个时候系统就会调用默认的系统字体了。 我使用的是 debian…

Android 9系统源码_音频管理(一)按键音效源码解析

前言 当用户点击Android智能设备的按钮的时候&#xff0c;如果伴随有按键音效的话&#xff0c;会给用户更好的交互体验。本期我们将会结合Android系统源码来具体分析一下控件是如何发出按键音效的。 一、系统加载按键音效资源 1、在TV版的Android智能设备中&#xff0c;我们…

Linux - gcc/g++工具使用

gcc/g是用于编译C/C程序的编译器 1.编译过程 1. 预处理&#xff08;头文件展开&#xff0c;条件编译&#xff0c;进行宏替换&#xff0c;去注释等) 2. 编译&#xff08;C语言汇编语言) 3. 汇编&#xff08;汇编->可重定位目标二进制文件&#xff0c;不可以被执行的&#xff…

【LLM系列之指令微调】长话短说大模型指令微调的“Prompt”

1 指令微调数据集形式“花样”太多 大家有没有分析过 prompt对模型训练或者推理的影响&#xff1f;之前推理的时候&#xff0c;发现不加训练的时候prompt&#xff0c;直接输入模型性能会变差的&#xff0c;这个倒是可以理解。假如不加prompt直接训练&#xff0c;是不是测试的时…

kafka集群搭建(Linux环境)

zookeeper搭建&#xff0c;可以搭建集群&#xff0c;也可以单机&#xff08;本地学习&#xff0c;没必要搭建zookeeper集群&#xff0c;单机完全够用了&#xff0c;主要学习的是kafka&#xff09; 1. 首先官网下载zookeeper&#xff1a;Apache ZooKeeper 2. 下载好之后上传到…

IP 监控软件

IP 监控软件可帮助管理员主动监控网络资源。随着各种设备连接到网络&#xff0c;监控设备和接口可能很复杂&#xff0c;为管理员提供这些设备的IP监控&#xff0c;了解其各种性能指标和问题。 使用有效的 IP 监控软件的优势 使用有效的 IP 监控系统和一套全面的 IP 监控工具&…