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

顺序表常用操作和笔试题

1、顺序表的常用操作

       1.1 顺序表的创建

          如下代码所示:创建了一个默认空间为10的整型顺序表,如果空间不足则会以1.5倍扩容。

List<Integer> list = new ArrayList<>();

          创建一个空间为15的整型顺序表

List<Integer> list2 = new ArrayList<>(15);

         创建一个顺序表其中存储的元素为其他数据结构(代码中以链表为例)

         //创建链表LinkedList linkedList = new LinkedList<>();linkedList.add(1);linkedList.add(2);linkedList.add(3);//存储链表的顺序表ArrayList<LinkedList> list1 = new ArrayList<>(linkedList);

         1.2 尾插法

 list.add(1);list.add(2);list.add(3);

                输出结果: 

                                

        1.3 在指定位置插入

list.add(2,188);

                输出结果:

                                

        1.4 在尾部插入数据结构的元素

                这里与add()方法做对比,证明addAll()方法插入的是元素 ,而add()方法则是将整个链表尾插。

  //创建链表LinkedList linkedList = new LinkedList<>();linkedList.add(1);linkedList.add(2);linkedList.add(3);//存储链表的顺序表ArrayList<LinkedList> list1 = new ArrayList<>();//在尾部插入链表list1.add(linkedList);System.out.println(list1);//在尾部插入链表的元素list1.addAll(linkedList);System.out.println(list1);

                输出结果:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​   

1.5 删除指定下标的元素 

        List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(2,188);System.out.println(list);//删除2下标的元素list.remove(2);System.out.println(list);

        输出结果:

1.6 删除第一个值为val的元素 

      List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(2,188);System.out.println(list);//删除值为188的元素list.remove(new Integer(188));System.out.println(list);

                运行结果如下:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

1.7 获取下标位置的元素

     List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(2,188);//获取下标为2的元素System.out.println(list.get(2));

                运行结果:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

1.8 设置下标x的元素为val 

        List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(2,188);System.out.println(list);//将下标为2的元素改为999list.set(2,999);System.out.println(list);

                运行结果:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                

1.9 判断元素是否存在顺序表中 

    List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(2,188);System.out.println(list);//判断188是否在顺序表中System.out.println(list.contains(188));

                 运行结果:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​​​​​​​​

1.10 清空顺序表 

  //清空顺序表list.clear();

        这里博主所列的方法有限,想了解更多方法的同学可以自行去文档中进行查找:​​​​​​​列表 (Java Platform SE 8 ) (oracle.com)

2、面试题

        2.1 27. 移除元素 - 力扣(LeetCode)

           分析:依题意,这道题我们需要将数组不等于val的元素放到数组的前面,使得数组的前k个元素包含不等于val的元素,最后返回k的值。

           解题:设置一个usesized下标,将不等于val值的元素放到数组的usedsized中,再让usesized++即可。

           代码:

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

        2.2 26. 删除有序数组中的重复项 - 力扣(LeetCode)

                分析: 我们需要在一个非严格递增的数组上,原地将不重复的元素放到数组的前k个位置上,然后返回k。

                解题思路:设置一个k下标遍历数组并且将k下标的元素与k-1下标的元素进行比较(因为这里的数组非严格递增,若相等会排列在一起),若不相等则放到原数组的usesized下标中。需要注意的是:这里0下标的元素一定是第一次出现的,因此,k和usesized下标均是从1开始。

class Solution {public int removeDuplicates(int[] nums) {int usesized = 1;for(int i = 1; i < nums.length;i++){if(nums[i] != nums[i-1]){nums[usesized] = nums[i];usesized++;}}return usesized;
}
}

 2.3 88. 合并两个有序数组 - 力扣(LeetCode)

                分析:我们需要将两个递增的数组合并成一个递增的总数组,并且这项操作需要原地完成,题目中两个数组的元素个数均已给出。下面是本题的图解​​​​​​​

                 解题思路:建立3个下标,分别为 i、j、k,由于合并后的数组需要升序,我们最好从两个升序数组的最后一个元素进行比较,因此,i为nums1的元素个数-1,j为nums2的元素个数-1,k为nums1的元素个数+nums2的元素个数 - 1。将nums1[i]和nums[j]进行比较,大的放到nums1[k]上。然后,让k-- 和 i 或 j--(哪个放入k中哪个就--),循环条件是任意一个数组的下标(i或j)走完,最后,再让没走完的那个数组的所有元素放入nums[k]中,k--。

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int i = m - 1;int j = n - 1;int k = m + n - 1;while(i >= 0 && j >= 0){if(nums1[i] > nums2[j]){nums1[k] = nums1[i];i--;k--;}else{nums1[k] = nums2[j];j--;k--;}}while(i >= 0){nums1[k] = nums1[i];i--;k--;}while(j >= 0){nums1[k] = nums2[j];j--;k--;}}}

2.4 118. 杨辉三角 - 力扣(LeetCode) 

        首先,点进去链接会发现一件事情,那就是这个函数的返回值,我们不认识!!!

        我们可以这么理解,那就是顺序表中存储着顺序表,那么顺序表中存储顺序表是什么东西呢?我们画个图看看:

        看着这个图是不是很熟悉:没错,就是二维数组。

        分析:我们需要完成上图所示的杨辉三角,在杨辉三角中,每个数都等于上一行的前一列和本列的和。

        解题思路:先建立好一个二维数组,定义列和行;然后先处理第一行,将第一行的1先添加入二维数组中;后面我们就可以开始处理后面的行:由图可知,每一行的第一列和最后一列的元素都是1,所以,我们需要在处理中间列之前和之后添加一个1上去,下面就是整个程序最难的部分,处理中间列:我们需要先获取上一行prevRow = ret.get(i-1),至于循环的次数,我们可以看到中间列一共有i-2列,因此,我们的循环条件是:j从1开始,j < i。获取上一行的前一列的元素和上一行的本列元素:prevRow.get(j-1) + prev.get(j)。

class Solution {public static List<List<Integer>> generate(int numRows) {List<List<Integer>> ret = new ArrayList<>();List<Integer> row = new ArrayList<>();row.add(1);ret.add(row);//第一行已经处理完//下面代码从第2行开始for (int i = 1; i < numRows; i++) {List<Integer> curRow = new ArrayList<>();curRow.add(1);//当前行的第一个元素//这里处理中间列//上一行List<Integer> prevRow = ret.get(i-1);for (int j = 1; j < i; j++) {int x = prevRow.get(j) + prevRow.get(j-1);curRow.add(x);}curRow.add(1);//当前行的最后一个元素ret.add(curRow);}return ret;}
}

 2.5 cvte面试题

        

        分析:本题需要建立一个Arraylist,将str1与str2中的元素进行比较,然后把str2中没有的元素丢进Arraylist里面。

        解题思路:遍历str1,看其中的元素是否包含在str2中(使用字符串中的charAt()和contains()方法)

public class Test {public static List<Character> func1(String s1,String s2){//遍历s1看其中是否存在s2中的元素List<Character> list = new ArrayList<>();for (int i = 0; i < s1.length(); i++) {char ch = s1.charAt(i);if(!s2.contains(ch + "")){list.add(ch);}}return list;}public static void main(String[] args) {String str1 = "welcome to cvte";String str2 = "cvte";List<Character> ret = func1(str1,str2);for (char ch: ret){System.out.print(ch);}}
}

相关文章:

顺序表常用操作和笔试题

1、顺序表的常用操作 1.1 顺序表的创建 如下代码所示&#xff1a;创建了一个默认空间为10的整型顺序表&#xff0c;如果空间不足则会以1.5倍扩容。 List<Integer> list new ArrayList<>(); 创建一个空间为15的整型顺序表 List<Integer> list2 new ArrayL…...

List<Map<String, Object>> 如何对某个字段求和

在Java中&#xff0c;如果你有一个List<Map<String, Object>>的结构&#xff0c;并且你想要对某个特定字段进行求和&#xff0c;你可以使用Java 8的Stream API来简化这个过程。下面是一个示例代码&#xff0c;演示如何对某个字段进行求和。 假设你有一个List<M…...

2024亚马逊数据分析!

整体财务数据23 净销售额&#xff1a;全年净销售额达 6380 亿美元&#xff0c;同比增长 11%。 净利润&#xff1a;全年净利润为 592 亿美元&#xff0c;较上年同期的 304 亿美元增长 95%。 经营活动现金流&#xff1a;经营活动现金流达 1159 亿美元&#xff0c;同比增加了 36…...

foobar2000设置DSP使用教程及软件推荐

foobar2000安卓中文版&#xff1a;一款高品质手机音频播放器 foobar2000安卓中文版是一款备受好评的高品质手机音频播放器。 几乎支持所有的音频格式&#xff0c;包括 MP3、MP4、AAC、CD 音频等。不论是经典老歌还是最新的流行音乐&#xff0c;foobar2000都能完美播放。除此之…...

Apache Logic4j 库反序列化漏洞复现与深度剖析

前言 在渗透测试领域&#xff0c;反序列化漏洞一直是安全研究人员和攻击者关注的焦点。今天&#xff0c;我们将深入探讨 Apache Logic4j 库中的反序列化漏洞&#xff0c;详细了解其原理&#xff0c;并进行完整的复现演示。 一、漏洞原理 Apache Logic4j 库在处理对象的反序列…...

FPGA VIVADO:axi-lite 从机和主机

FPGA VIVADO:axi-lite 从机和主机 TOC在这里插入代码片 前言 协议就不详细讲解了&#xff0c;直接看手册即可。下面主要如何写代码和关键的时序。 此外下面的代码可以直接用于实际工程 一、AXI-LITE 主机 数据转axi lite接口&#xff1a; 读/写数据FIFO缓存 仲裁&#xff1a…...

LabVIEW 中的 3dgraph.llb库

3dgraph.llb 库位于C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform目录下&#xff0c;是 LabVIEW 系统里用于 3D 图形相关操作的关键库。它为 LabVIEW 用户提供众多功能&#xff0c;可在应用程序内创建、显示和交互各类 3D 图形&#xff0c;极大增…...

【Linux】文件系统:文件fd

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;linux笔记仓 目录 01.回顾C文件接口02.系统文件I/O02.1 openflags 参数&#xff08;文件打开模式&#xff09;标记位传参1. 访问模式&#xff08;必须指定一个&#xff09;2. 额外控制标志&#xf…...

Vue学习记录19

TransitonGroup <TransitionGroup> 是一个内置组件&#xff0c;用于对 v-for 列表中的元素或组件的插入、移除和顺序改变添加动画效果。 和 <Transtion> 的区别 <TranstionGroup> 支持和 <Transtion> 基本相同的 props、CSS过渡 class 和 JavaScript…...

MATLAB更改图论的布局:设置layout

在图论那一章&#xff0c;我们讲过最小生成树和单源最短路径&#xff08;见&#xff1a;从零开始学数学建模&#xff09;&#xff1a; 以最短路径那节课为例&#xff0c;把绘图pplot那部分代码写为&#xff1a; % plot绘图有很多参数可以设置&#xff0c;使图尽量美观 P plot…...

【分果果——DP(困难)】

题目 分析 分果果题解参考&#xff0c;下面是补充https://blog.csdn.net/AC__dream/article/details/129431299 关于状态 设f[i][j][k]表示第i个人取到的最后一个糖果编号是j&#xff0c;第i-1个人取到的最后一个糖果编号小于等于k时的最大重量的最小值 关于转移方程 关于 j …...

禁止WPS强制打开PDF文件

原文网址&#xff1a;禁止WPS强制打开PDF文件_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何避免WPS强制打开PDF文件。 方法 1.删除注册表里.pdf的WPS绑定 WinR&#xff0c;输入&#xff1a;regedit&#xff0c;回车。找到&#xff1a;HKEY_CLASSES_ROOT\.pdf删除KWPS.PDF…...

罗技鼠标接收器丢了,怎么用另一个logi接收器重新配对?

1.首先接收器得是logi的&#xff0c;其次看这个接收器是什么类型的&#xff0c;一共有以下3种。&#xff08;这几种接收器都可以给其他logi鼠标用&#xff09; 下图左侧带红标的这个&#xff08;标可能带颜色或者是透明&#xff0c;都一样&#xff09;&#xff0c;叫多设备接收…...

ffmpeg configure 研究2:分析屏幕输出及文件输出的具体过程

author: hjjdebug date: 2025年 02月 17日 星期一 16:57:55 CST description: ffmpeg configure 研究2 分析屏幕输出及文件输出的具体过程 文章目录 0. 执行./configure 命令1. sed: cant read 信息是从哪里来的 ?1.1 find_filters_extern()1.2 find_things_extern() 2. 屏幕输…...

软件内有离线模型,效果也很实用......

今天给大家带来一款超实用的图片画质增强软件&#xff0c;完全不需要联网&#xff0c;随时随地都能用。 图片画质增强 一键增强画质 使用起来也超简单&#xff0c;完全不需要安装。 软件主要有两个功能&#xff1a;图片增强和视频增强。 在使用之前&#xff0c;先确定一下输出…...

Linux下ioctl的应用

文章目录 1、ioctl简介2、示例程序编写2.1、应用程序编写2.2、驱动程序编写 3、ioctl命令的构成4、测试 1、ioctl简介 ioctl&#xff08;input/output control&#xff09;是Linux中的一个系统调用&#xff0c;主要用于设备驱动程序与用户空间应用程序之间进行设备特定的输入/…...

如何通过 prometheus-operator 实现服务发现

在之前的章节中,我们讲解了如何编写一个自定义的 Exporter,以便将指标暴露给 Prometheus 进行抓取。现在,我们将进一步扩展这个内容,介绍如何使用 prometheus-operator 在 Kubernetes 集群中自动发现并监控这些暴露的指标。 部署应用 在 Kubernetes 集群中部署我们的自定…...

认识HTML的标签结构

一、HTML的基本概念 1.什么是HTML&#xff1f; ①HTML是描述网页的一种标记语言&#xff0c;也被称为超文本标记语言【并不是一种编程语言】 ②HTML包含了HTML标签和文本内容 ③HTML文档也称为web页面 2.HTML的标签 HTML的标签通常成对出现&#xff0c;HTML文档由标签和受…...

MySQL 之INDEX 索引(Index Index of MySQL)

MySQL 之INDEX 索引 1.4 INDEX 索引 1.4.1 索引介绍 索引&#xff1a;是排序的快速查找的特殊数据结构&#xff0c;定义作为查找条件的字段上&#xff0c;又称为键 key&#xff0c;索引通过存储引擎实现。 优点 大大加快数据的检索速度; 创建唯一性索引&#xff0c;保证数…...

基于flask+vue的租房信息可视化系统

✔️本项目利用 python 网络爬虫抓取某租房网站的租房信息&#xff0c;完成数据清洗和结构化&#xff0c;存储到数据库中&#xff0c;搭建web系统对各个市区的租金、房源信息进行展示&#xff0c;根据各种条件对租金进行预测。 1、数据概览 ​ 将爬取到的数据进行展示&#xff…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

Xcode 16 集成 cocoapods 报错

基于 Xcode 16 新建工程项目&#xff0c;集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...

门静脉高压——表现

一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构&#xff1a;由肠系膜上静脉和脾静脉汇合构成&#xff0c;是肝脏血液供应的主要来源。淤血后果&#xff1a;门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血&#xff0c;引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...

goreplay

1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具&#xff0c;可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长&#xff0c;测试它所需的工作量也会呈指数级增长。GoRepl…...

Appium下载安装配置保姆教程(图文详解)

目录 一、Appium软件介绍 1.特点 2.工作原理 3.应用场景 二、环境准备 安装 Node.js 安装 Appium 安装 JDK 安装 Android SDK 安装Python及依赖包 三、安装教程 1.Node.js安装 1.1.下载Node 1.2.安装程序 1.3.配置npm仓储和缓存 1.4. 配置环境 1.5.测试Node.j…...