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

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...

VisualXML全新升级 | 新增数据库编辑功能

VisualXML是一个功能强大的网络总线设计工具&#xff0c;专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑&#xff08;如DBC、LDF、ARXML、HEX等&#xff09;&#xff0c;并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言&#xff1a;本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中&#xff0c;跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南&#xff0c;你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案&#xff0c;并结合内网…...