顺序表常用操作和笔试题

news2025/3/24 0:13:51

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的元素改为999
        list.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);
    }
    }
}

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

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

相关文章

二.数据治理流程架构

1、数据治理流程架构核心思想&#xff1a; 该图描绘了一个以数据标准规范体系为核心&#xff0c;大数据生命周期管理为主线&#xff0c;数据资源中心为依托&#xff0c;并辅以数据质量管理和大数据安全与隐私管理的数据治理流程架构。它旨在通过规范化的流程和技术手段&#x…

解锁机器学习核心算法 | 线性回归:机器学习的基石

在机器学习的众多算法中&#xff0c;线性回归宛如一块基石&#xff0c;看似质朴无华&#xff0c;却稳稳支撑起诸多复杂模型的架构。它是我们初涉机器学习领域时便会邂逅的算法之一&#xff0c;其原理与应用广泛渗透于各个领域。无论是预测房价走势、剖析股票市场波动&#xff0…

CSS 底部颗粒磨砂特效

参考&#xff1a;element-plus的顶部效果 background-image: radial-gradient(transparent 1px, var(--bg-color) 1px); background-size: 4px 4px; backdrop-filter: saturate(50%) blur(4px); 注意点&#xff1a;var(--bg-color) 改为跟你背景色相同的即可。 其他自己看情况…

QT自定义扫描控件,支持任意方位拖动和拖动扫描范围。

部分代码&#xff1a; void FishControlForm::paintEvent(QPaintEvent *event) {QPainter p(this);p.setRenderHints(QPainter::Antialiasing|QPainter::SmoothPixmapTransform);p.translate(m_centerPoint);//bgp.setPen(Qt::white);p.drawEllipse(-m_radius,-m_radius,m_rad…

Ubuntu18.04安装rvm、ruby2.6.5和rails5.2.6

系统环境&#xff1a;Ubuntu 18.04 一、安装前准备 1. sudo apt update 2. sudo apt upgrade 如果提示abort&#xff0c;忽略。 3. sudo apt install sqlite3 gnupg curl git libpq-dev 二、安装rvm ruby版本管理器 1.切换管理员模式 sudo su 2.安装软件签名公钥 gpg…

燧光 XimmerseMR SDK接入Unity

官网SDK文档连接&#xff1a; RhinoX Unity XR SDK 一&#xff1a;下载SDK 下载链接&#xff1a;RhinoX Unity XR SDK 二&#xff1a;打开Unity项目&#xff0c;添加Package 1、先添加XR Core Utilties包和XR Interaction Toolkit包 2、导 2、再导入下载好的燧光SDK 三&…

罗德与施瓦茨ZNB20,矢量网络分析仪9KHz-20GHz

罗德与施瓦茨ZNB20矢量网络分析仪9KHz-20GHz R&SZNB20矢量网络分析仪 产品型号: ZNB20 产品品牌&#xff1a;罗德与施瓦茨 R&S 产品名称: 矢量网络分析仪 频率范围&#xff1a;9kHz - 20GHz R&S ZNB 矢量网络分析仪 良好的测量速度、动态范围和操作方便性&am…

突破平面限制:低空经济激活城市土地“立体生长力”

蓄锐行&#xff1a;我深耕于低空经济领域&#xff0c;同时对IOT技术有着深入的理解&#xff0c;而在AI的探索性研究上&#xff0c;我也已迈出坚实的步伐&#xff0c;虽起步不久&#xff0c;却满怀热情与憧憬。平日里&#xff0c;我热衷于撰写关于低空经济的文章&#xff0c;分享…

可调节图片参数,解决图片模糊及尺寸过小问题的工具

软件介绍 你是否正为图片模糊、尺寸太小而烦恼&#xff1f;别担心&#xff0c;有这样一款神器能帮你轻松解决。它能精准调节图片参数&#xff0c;即便原本模糊不清的图片&#xff0c;经它处理后也能变得高清锐利&#xff0c;瞬间让图片焕然一新。而且&#xff0c;它还具备导出…

React 与 Vue 对比指南 - 上

React 与 Vue 对比指南 - 上 本文将展示如何在 React 和 Vue 中实现常见功能&#xff0c;从基础渲染到高级状态管理 Hello 分别使用 react 和 vue 写一个 Hello World&#xff01; react export default () > {return <div>Hello World!</div>; }vue <…

✨2.快速了解HTML5的标签类型

✨✨HTML5 的标签类型丰富多样&#xff0c;每种类型都有其独特的功能和用途&#xff0c;以下是一些常见的 HTML5 标签类型介绍&#xff1a; &#x1f98b;结构标签 &#x1faad;<html>&#xff1a;它是 HTML 文档的根标签&#xff0c;所有其他标签都包含在这个标签内&am…

力扣 买卖股票的最佳时机

贪心算法典型例题。 题目 做过股票交易的都知道&#xff0c;想获取最大利润&#xff0c;就得从最低点买入&#xff0c;最高点卖出。这题刚好可以用暴力&#xff0c;一个数组中找到最大的数跟最小的数&#xff0c;然后注意一下最小的数在最大的数前面即可。从一个数组中选两个数…

【SQL】SQL多表查询

&#x1f384;概念 一般我们说的多表查询都涉及外键和父子表之间的关系。比如一对多:一般前面指的是父表后面指的是子表。 ⭐分类 一对多(多对一) 多对多 一对一 ⭐一对多 &#x1f4e2;案例&#xff1a;部门与员工的关系 &#x1f4e2;关系&#xff1a;一个部门对应多个员…

知识篇 | DeepSeek企业部署模式主要有6种

国际数据公司IDC近日发文《DeepSeek爆火的背后&#xff0c;大模型/生成式AI市场生态潜在影响引人关注》表示&#xff1a; “大模型的部署过程需同时满足高并发与低延迟的严苛要求&#xff0c;并需全面考量数据安全、隐私保障、资源弹性扩展以及系统维护等多重因素&#xff0c;D…

uniapp中@input输入事件在修改值只有第一次有效的问题解决

在uniapp中使用输入框&#xff0c;要求输入不超过7个字&#xff0c;所以需要监听输入事件&#xff0c;当每次输入文字的时候&#xff0c;就把输入的值截断&#xff0c;取前7个值。但是在input事件中&#xff0c;重新赋值的值发生了变化&#xff0c;但是页面上的还是没有变&…

Linux运维篇-存储基础知识

什么是存储 用于存放数据信息的设备和介质&#xff0c;等同于计算机系统中的外部存储&#xff0c;是一个完整的系统。 存储的结构和趋势 存储的体系结构 当前存储的主要体系结构有三种&#xff1a; DASNASSAN 存储的发展趋势 ssd固态硬盘云存储一体化应用存储设备非结构…

Rook-ceph(1.92最新版)

安装前准备 #确认安装lvm2 yum install lvm2 -y #启用rbd模块 modprobe rbd cat > /etc/rc.sysinit << EOF #!/bin/bash for file in /etc/sysconfig/modules/*.modules do[ -x \$file ] && \$file done EOF cat > /etc/sysconfig/modules/rbd.modules &l…

第2章 信息技术发展(一)

2.1 信息技术及其发展 2.1.1 计算机软硬件 计算机硬件(Computer Hardware)是指计算机系统中由电子、机械和光电元件等组成的各种物理装置的总称。 计算机软件 (Computer Software)是指计算机系统中的程序及其文档&#xff0c;程序是计算任务的处理对象和处理规则的描述; 文档…

【网络基本知识--2】

网络基本知识--2 1.主机A和主机B通过三次握手TCP连接&#xff0c;过程是&#xff1a; TCP三次握手连接过程如下&#xff1a; 1.客户端发送SYN(SEQx)报文发送给服务器端&#xff0c;进入SYN_SEND状态&#xff1b; 2.服务器端收到SYN报文&#xff0c;回应一个SYN(SEQy)ACK(ACKx1)…

摄影——曝光三要素

曝光三要素 光圈&#xff08;F&#xff09;&#xff1a;控制进光量的装置快门&#xff08;1/X&#xff09;&#xff1a;接受光线的时间感光度&#xff08;ISO&#xff09;&#xff1a;感光器件对光线的敏感程度 一、快门&#xff08;1/X&#xff09; 静物 1/125 动物 1/500 …