数据结构训练营4

news2025/1/22 16:48:58

开启蓝桥杯备战计划,每日练习算法一题!!坚持下去,想必下一年的蓝桥杯将会有你!!

笔者是在力扣上面进行的刷题!!由于是第一次刷题!找到的题目也不咋样!所以,就凑合凑合吧!笔者打算从数据结构开始刷起,毕竟现在刚刚接触到数据结构!!

在力扣上找到的刷题链接为:

https://leetcode.cn/study-plan/data-structures/?progress=yqv80ci

力扣是一个很不错的刷题平台!

跟着笔者走起来吧!!加油干!

566. 重塑矩阵

在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。

给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 rc ,分别表示想要的重构的矩阵的行数和列数。

重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。

如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。

输入:mat = [[1,2],[3,4]], r = 1, c = 4

输出:[[1,2,3,4]]

试列2:

输入:mat = [[1,2],[3,4]], r = 2, c = 4

输出:[[1,2],[3,4]]

友谊提示:

  • m == mat.length

  • n == mat[i].length

  • 1 <= m, n <= 100

  • -1000 <= mat[i][j] <= 1000

  • 1 <= r, c <= 300

首先对于二维数组,我们需要知道的是:在Java的二维数组中,每一行每一列,如何去求出来??这个在一开始就难道了我!!但是,身为青少年好好学习的我!怎能被打到??于是,用了一个函数,这个复杂的问题,就被聪明的我解决了!!

下面请看笔者的代码:如何来求出二维数组的行数,列数的!

    public static void  test(int[][] mat ) {
        System.out.println(mat.length); //求出 的是二维数组的行数 : mat.length

        System.out.println(mat[0].length);  //求出二维数组第0行有多少个元素
        System.out.println(mat[1].length);
        System.out.println("==============");
        System.out.println(mat[2].length);  //数组越界进行报错!
    }

    public static void main(String[] args) {
        int[][] mat = {{1,2,3,4},{5,4,3,2,1,7,6}};
        test(mat);
    }

经过上述的代码的使用,那么请看代码的运行结果:

我们根据上述代码的一一对比,就可以看出来最后如何在Java当中使用二维数组的行和列了!!

那么,我们接下来进入言归正传!!

对于该题目,我们首先要想到的是:

  1. 必须要合乎情理!!要不然就会直接返回原来的数组!!因此,我们需要进行简单的判断

  1. 然后就是最艰难的数组转化部分了!

经过上述的简单思考,我们可以有着下列的代码:

 public static int[][] test1(int[][] mat , int r ,int c) {
        //重构后的数组,需要合乎情理
        int m= mat.length; //行数
        int n=mat[0].length; //列数
        if(m*n != r*c) {
            return mat;
        }
        //将mat[m][n]转化为array[r][c]
        int[][] array = new int[r][c];
        int ret=0; //行
        int cur=0; //列
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (cur == c ) {
                    ret =ret +1;
                    cur =0;
                }
                array[ret][cur] = mat[i][j];
                cur = cur +1;
            }
        }
        return array;
    }

其实,这个代码,看起来也不是很难,但是,最为艰难的还是哪个想法!!没有想法,其实看起来就是很难了!!

118. 杨辉三角

给定一个非负整数 numRows生成「杨辉三角」的前 numRows 行。

在「杨辉三角」中,每个数是它左上方和右上方的数的和。

示例 1:

输入: numRows = 5

输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

示例 2:

输入: numRows = 1

输出: [[1]]

提示:

  • 1 <= numRows <= 30

这个杨辉三角我们在之前C语言阶段,及其Java的初学阶段,都有过学习!但是,既然这次放到了数据结构这一块来进行学习,那么,肯定不是简简单单的代码就能打印出来的了!现在将用ArrayList顺序表来进行打印!!高难度哟!!

首先,我们可以根据力扣当中给的默认代码说起:

    public static List<List<Integer>> generate1(int numPows)

看到这个,我们首先要想到的是:函数的返回值类型是:List<List<Integer>> 这个是我们之前所没有接触过的类型,但是,对于杨辉三角,想必我们很熟悉它的返回值吧!!一定是一个二维数组吧!!因此:List<List<Integer>>我们也可以看出是一个二维数组!!因此,我们有着一下的使用:

      //定义一个二维数组
        List<List<Integer>> ret = new ArrayList<>();
        //定义一维数组
        List<Integer> row = new ArrayList<>();

有了上述的代码,那么,我们就可以进行总体代码的书写了!

    public  static List<List<Integer>> generate(int numRows) {
        //定义一个二维数组
        List<List<Integer>> ret = new ArrayList<>();
        //定义一维数组
        List<Integer> row = new ArrayList<>();
        //确定好第一行的1,并且将1放入到ret中
        row.add(1);
        ret.add(row);
        //中间位置curRow的赋值
        for (int i = 1; i < numRows; i++) {
            //获取到前一行的元素
            List<Integer> prevRow = ret.get(i-1);//前一行

            List<Integer> curRow = new ArrayList<>();
            curRow.add(1);//第一个1
            //中间curRow list的赋值
            for (int j = 1; j < i; j++) {

                int x = prevRow.get(j)+prevRow.get(j-1);
                curRow.add(x);
            }
            //添加最后的1 ,并且放入到ret中!
            curRow.add(1);//最后一个1
            ret.add(curRow);
        }
        return ret;
    }

那么,我们来深入研究一下上述的代码:

对于第二行的元素:

对于第三行往后的元素……

上面便是笔者进行写代码的主要思路!!有意者请多多欣赏!!

面试编程题:删除字符

要求删除s1中的字符,这些字符都是s2中出现的!

s1 = "welcome to leetcode"  , s2 = "come";

最后得到的为:s1="wl t ltd"

那么请看笔者的代码:

    public static void main(String[] args) {
        ArrayList<Character> list = new ArrayList<>();
        String s1 = "welcome to leetcode";
        String s2 = "come";

        for (int i = 0; i < s1.length(); i++) {
            //获取单个元素
            char ch = s1.charAt(i);
            if (!s2.contains(ch+"")){
                list.add(ch);
            }
        }

        //打印
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i));
        }
    }

上述代码的运行结果为:

本次数据结构练习题到此结束!!

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

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

相关文章

itop-imx8m开发板gstreamer日志级别设置

gst 的日志等级分为 none(0)error(1) warning(2) info(3) debug(4) log(5)。默认 gst 的日志等级为 1&#xff0c;即 error 打印&#xff0c;出错时会打印。 1&#xff09;全局日志级别设置 如果需要更高级别打印&#xff0c;修改环境变量 GST_DEBUG 即可。如需要 warning 级别…

基于python的transform行人车辆识别

Transformer是一种神经网络体系结构&#xff0c;由于它能够有效地处理顺序数据中的长期依赖性&#xff0c;因此在自然语言处理(NLP)任务中受到欢迎。它还被应用于各种其他任务&#xff0c;包括图像分类、对象检测和语音识别。 在车辆和行人识别方面&#xff0c;transformer可用…

浅谈安科瑞电能预付费系统在大电力客户中的设计及应用分析

摘 要 随着我国供电企业的不断发展&#xff0c;而用电模式也在不断改革&#xff0c;预付费技术在气、电等部门得到普遍的使用&#xff0c;本文主要针对预付费系统在大电力客户中的使用情况进行分析&#xff0c;提高用电用户的缴费率&#xff0c;有效的避免了客户恶意偷窃电行…

【小5聊】Winform从指定服务器下载文件的方式

在一些实际项目中&#xff0c;我们往往需要上传一些excel、word等办公文件&#xff0c;甚至是mp3、mp4等音频视频文件。 当然&#xff0c;大多数小型网站会放到自己服务器&#xff0c;如果文件量不大的话 如果文件数量会很多&#xff0c;那么就需要考虑使用第三方来保管存储 不…

Elasticsearch:使用 NLP 问答模型与你喜欢的圣诞歌曲交谈

自然语言处理 (NLP) 是人工智能 (AI) 的一个分支&#xff0c;旨在通过将计算语言学与统计、机器学习和深度学习模型相结合&#xff0c;尽可能接近人类解释地理解人类语言。 NLP 的最大挑战之一是在考虑到各种语言表示的情况下预训练文本数据的过程。 2018 年&#xff0c;谷歌…

企业报表插件怎么用?

最近因为单位年底要做部门总结汇报&#xff0c;需要使用很多的数据以报表的形式来引证今年的工作情况&#xff0c;内部的 OA、ERP 这些业务系统是指望不上了。作为懂一点 SQL、又经常用 Excel 来给领导做报表的我&#xff0c;在网上一轮操作&#xff08;就是百度啦&#xff09;…

算法通关手册 刷题笔记1 数组基础

算法通关手册 刷题笔记1 数组基础 持续更新中 文章目录算法通关手册 刷题笔记1 数组基础数组操作题目0189 轮转数组AC自己的解法其他解法知识点查漏补缺关于python中的数组赋值python中对象的引用0066 加一AC自己的解法其他解法知识点查漏补缺0724 寻找数组的中心下标AC自己的解…

大数据必学Java基础(一百一十六):Application域监听器

文章目录 Application域监听器 一、认识Application域监听器 二、监听器代码 Application域监听器 一、认识Application域监听器

关于金字塔格式转tiff并且openslide能获取到缩略图等标签信息

我们都知道openslide通过openslide_get_associated_image_names获取相关的图像名称&#xff0c;比如"thumbnail",“label”,“macro"等。那我们将"thumbnail”,“label”,"macro"写入tiff的时候&#xff0c;如何才能保证openslide能够获取到呢&a…

2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 建模方案及代码实现(更新中)

【BetterBench原创】2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 建模方案及代码实现&#xff08;更新中&#xff09; 更新进展 2022年12月20日 22:00 发布初步思路 &#xff08;待更新&#xff09;发布初步思路实现代码 …

即时通讯音视频开发视频编解码预测技术

目的是去除空间冗余和时间冗余。因为视频存在大量的空间冗余和时间冗余&#xff0c;包括空间冗余、时间冗余&#xff0c;预测后得到去除大部分空间或时间冗余的残差。 图像空间相邻像素具有很强的相关性&#xff0c;帧内预测技术去除空间冗余。 视频图像在时间上有较强的相关性…

组团出海抢抓跨境电商外贸,有利于2023“开门稳”

组团出海抢抓跨境电商外贸&#xff0c;有利于2023“开门稳” 我国是货物贸易第一大国&#xff0c;强大的生产能力、出色的产业配套、完善的物流供应、充足高效的劳动力&#xff0c;都为我国成为贸易强国提供了有利条件。 近几年&#xff0c;中国跨境电商产业进入快速发展阶段&a…

区块链北大肖老师学习笔记4

第五节 比特币系统的实现 区块链是去中心化的账本&#xff0c;比特币使用的是基于交易的这种账本模式(transaction[交易]-based ledger[账本])。系统当中并不会显示每个账户有多少钱。 比特币系统的全节点要维护一个叫UTXO(unspent transaction output)(还没有被花出去的交易的…

成为2.2亿儿童主动要吃的天然营养,AMSTRONG维小壮做对了什么?

文|螳螂观察&#xff08;TanglangFin&#xff09; 随着疫情防控政策的调整&#xff0c;在人们开始注重提升身体免疫力以抗击病毒的措施中&#xff0c;在国外流行多年的接骨木莓&#xff0c;开始受到国内消费者的青睐。 接骨木莓的功效早已被美国FDA和加拿大FDA双重认证&#…

VUE3-Pinia的使用《三》

pinia的官网是简介 | Pinia。 它的功能和vuex差不多&#xff0c;但是pinia更加优于vuex。主要用于状态管理&#xff0c;管理全局的变量&#xff0c;也可以存储页面A的值&#xff0c;然后在页面B中直接访问&#xff0c;不分父子组件之间的关系&#xff0c;可以任意传值&#xf…

设计模式之状态模式

State design pattern 状态模式的概念、状态模式的结构、状态模式的优缺点、状态模式的使用场景、状态模式的实现示例、状态模式的源码分析 1、状态模式的概念 对有状态的对象&#xff0c;把复杂的判断逻辑提取到不同的状态对象中&#xff0c;允许状态对象在其内部状态发生改变…

使用预授权签名加速 BSV 有状态合约更新

状态更新竞争 BSV 智能合约将状态存储在交易链的输出中。 当交易花费包含旧状态的输出并创建包含新状态的输出时&#xff0c;就会发生状态转换。 在任何给定时间&#xff0c;交易链末端的单个输出/UTXO 都具有最新状态。 当多个事务竞争同时更新共享状态时&#xff0c;就会出…

Anchor2

Anchor也是第二季了~~ 来一起来学习Faster R-CNN中的RPN及Anchor 说到RPN和Anchor&#xff0c;应该立马就能想到Faster R-CNN网络框架 首先我先将几类经典的目标检测网络做一个对比&#xff0c;然后开始说说今天要讲的知识。 最开始出现的是R-CNN&#xff0c;如下图&#xff…

什么是编程?程序员主要做啥工作?如何学习呢?

对编程的理解 编程换成通俗的语言可以理解为使用一些英文单词组成的指令发送给计算机&#xff0c;做指定的事情。 编程的种类 如今在互联网市场中&#xff0c;编程的工作一共分为了3大类&#xff1a; 前端编程 后台编程 运维编程 前端编程&#xff1a; 什么是前端&#…

门诊地图导航怎么做,零成本的医院室内导航解决方案

现在很多医院都比较大&#xff0c;科室众多&#xff0c;往往让人不知道要找的科室在哪里&#xff0c;不了解看病的流程&#xff0c;只能去咨询台询问&#xff0c;费时又费力……电子地图作为大家最喜闻乐见的高效应用形式&#xff0c;可高效为病患提供导医服务&#xff0c;并为…