当前位置: 首页 > 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…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

全面解析数据库:从基础概念到前沿应用​

在数字化时代&#xff0c;数据已成为企业和社会发展的核心资产&#xff0c;而数据库作为存储、管理和处理数据的关键工具&#xff0c;在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理&#xff0c;到社交网络的用户数据存储&#xff0c;再到金融行业的交易记录处理&a…...