【百日冲大厂】第十八篇,牛客网选择题+编程题统计每个月兔子的总数+字符串通配符.

news/2024/6/15 10:55:28 标签: oracle, 数据库

前言:

  • 大家好,我是良辰丫,第十八篇,牛客网选择题+编程题统计每个月兔子的总数+字符串通配符.💞💞💞
  • 每天早上醒来时,我们可以有两个简单的选择:回头去睡,继续做梦。或者,起身去追逐梦想。

🧑个人主页:良辰针不戳
📖所属专栏:百日冲大厂
🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。
💦期待大家三连,关注,点赞,收藏。
💌作者能力有限,可能也会出错,欢迎大家指正。
💞愿与君为伴,共探Java汪洋大海。

在这里插入图片描述

目录

  • 1. 选择题
  • 2. 编程题
    • 2.1 统计每个月兔子的总数
    • 2.2 36895-字符串通配符

1. 选择题

在这里插入图片描述

  • count返回行数,只能返回数值.
  • t1没有数据,或者t1的数据都是null,那么max返回null
  • comcat是字符串拼接函数,数据库中字符串不能使用加号进行拼接,如果拼接的一个字符串是null,那么最终结果就是null.

在这里插入图片描述

  • 外键可以关联另一张表.
  • 默认创建的外键是严格模式(必须在主表中,关联的键有该数据),其它模式下外键值可以为空.
  • 候选键,可以标识数据唯一性的最小集.

在这里插入图片描述

  • A选项关联的数据可以共享,在逻辑和物理上独立性高.
  • B选项冗余度低.
  • C选项,数据库要具有安全性才能进行使用(数据是非常重要的)
  • D选项,数据能实现共享.

在这里插入图片描述

top是sql server的关键字,用于求前n条数据,如果要查从m到n条,要写子查询.
select top n查询字段 from…

在这里插入图片描述

  • 一个下划线匹配一个字符
  • %号匹配多个字符

在这里插入图片描述

avg表示平均

在这里插入图片描述

  • phoneon属性是数字组成,使用数值数据类型,和字符串可以比较(数据库里面可以这样比较,人家规定的),数据库在进行比较的时候会进行类型转化,可能会耗时
  • 模糊匹配会使用索引,使用索引节省时间.
  • C中使用函数,不会在使用索引,这将会进行全部扫描,也就是数据全部遍历,并且函数本身执行也是比较耗时的,因此使用函数速度最慢.

在这里插入图片描述

使用%号作为通配符匹配0个以上的字符,包含0.

在这里插入图片描述

持续性也叫作持久性.

在这里插入图片描述

2. 编程题

2.1 统计每个月兔子的总数

做题链接:
链接: 统计每个月兔子的总数

题目描述:

在这里插入图片描述

题目分析:

  • 这道题第一眼看是一个数学问题,没错就是一个数学问题.
  • 找到了规律问题就迎刃而解了,有人可能会说这不是废话嘛,怎么找规律呢?
  • 我们先列举几组数字,第一个月1只兔子,第二个月2只兔子,第三个月3只兔子,第四个月5只兔子.
  • 我们会惊奇的发现这不是斐波那契数列嘛,我们可以使用递归去解决,但是递归很容易超时,于是乎,我们使用动态规划.
  • 我们还需要培养一种思想,斐波那契是我们经常做的题,于是我们遇到这样的找规律题,优先去看看符不符合斐波那契.
  • 好多看起来难的题都是找规律,我们优先找规律,实在找不到规律可以暴力试一下,在比试的时候要优先做那些会的题,别钻牛角尖.
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] arr = new int[n+1];
        arr[1] = 1;
        arr[2] = 1;
        for(int i = 3;i<n+1;i++){
            arr[i] = arr[i-1] + arr[i-2];
        }
        System.out.println(arr[n]);
    }
}

2.2 36895-字符串通配符

做题链接:
链接: 36895-字符串通配符

题目描述:

在这里插入图片描述
在这里插入图片描述

题目分析:

  • 读完题目是否有一些迷茫呢?模拟题,情况种类这么多,难以完全通过,*号是通配符,到底该通配几个符号呢,一连串的问号浮现在脑海中.
  • *号匹配几个字符,这是关键,我们会想到递归和动态规划,但是递归的时间复杂度太高了,因此我们使用动态规划.
  • 什么是动态规划,我们现在先简单了解,后面我会带领大家系统学习动态规划,先接触动态规划,脑海中多多少少对动态规划(简称dp)有一定的认识即可,现在搞不懂也没多大的关系.
  • 递归想必大家都知道,上面我们讲了斐波那契的类似题每个月的兔子总数,因此我就拿这个举例带大家简单认识动态规划.
  • 动态规划是用数组实现的,数组元素记忆我们要存的数据,上面的兔子问题数组下标表示第几个月,下标为2表示第二个月,该元素表示第二个月的兔子总数.
  • 通过数组记忆我们的元素,不用重新计算,通过索引直接定位我们需要的数据,提高了我们的时间效率.
  • 那么如何通过数组进行记忆,我们就需要找规律,初始化初始元素,通过初始元素依次记忆下一个元素.
  • 因此呢,元素具有依赖关系,某一个元素可能依赖前一个数据或者后一个数据,我们只要找到依赖关系,问题就基本解决了.
  • 然后我们回归到我们本道题字符串匹配问题,我们需要通过二维数组记忆我们的所有情况,因此我们选择动态规划.

接下来我们先用二维数组举例模拟一个过程来帮助我们理解一下这道题.横坐标我们用 i 来表示,纵坐标用 j 来表示.

  • 初始值,特殊处理一下第0行,我们把dp[0][0]赋值为true,因为这个位置二者都为空.*号是通配符,可以匹配任意多个字符,特殊处理一下*号,遇到*号就赋值该位置的前一个值,*号的关系式子为dp[i][j] = dp[i-1][j] || dp[i][j-1],只要i的前一个或者j的前一个满足即可.
  • 注意问号只匹配一个字符,不用赋予初始值,交给下面处理即可,与问号匹配的要有字符,不能为空,因此dp[i][j] = dp[i-1][j-1].
  • 两个字符相等(不区分大小写,因此需要转换去比较),直接返回true即可.

在这里插入图片描述

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            String t=sc.nextLine();
            String s=sc.nextLine();
            System.out.println(func(t,s));
        }
    }
    public static boolean func(String t,String s){
        char[] ct=t.toCharArray();
        char[] cs=s.toCharArray();
        int lt=ct.length;
        int ls=cs.length;
        boolean[][] dp=new boolean[ls+1][lt+1];
        dp[0][0]=true;
        for(int j = 1;j<lt;j++){
            if(ct[j-1] == '*'){
                dp[0][j] = dp[0][j-1];
            }
        }
        for(int i=1;i<=ls;i++){
            for(int j=1;j<=lt;j++){
                if(ct[j-1]=='*'){
                    if(i==0){
                        dp[i][j]=dp[i][j-1];
                    }else{
                        if(cs[i-1]=='.' || (cs[i-1]>='0'&&cs[i-1]<='9') ||
                                (cs[i-1]>='a'&&cs[i-1]<='z') ||(cs[i-1]>='A'&&cs[i-1]<='Z')
                        ){
                            dp[i][j]=dp[i-1][j] || dp[i][j-1];
                        }
                    }
                }else{
                    if(i>0 && func2(ct[j-1],cs[i-1])){
                        dp[i][j]=dp[i-1][j-1];
                    }
                }
            }
        }
        return dp[ls][lt];
    }
    public static boolean func2(char t,char s){
        if(t=='?') return true;
        if(t>='a'&&t<='z'){
            t=(char)(t-'a'+'A');
        }
        if(s>='a'&&s<='z'){
            s=(char)(s-'a'+'A');
        }
        return s == t;
    }
}

http://www.niftyadmin.cn/n/476634.html

相关文章

Linux自主学习 - 搭建环境

备注&#xff1a;ubuntu-20.04.3-desktop-amd64.iso 一、下载VSCode 1、进入火狐浏览器&#xff0c;百度搜索code.visualstudio.com 2、下载VSCode安装包 3、下载完成后&#xff0c;选择打开所在文件夹 4、点击鼠标右键&#xff0c;选择在终端打开 5、输入以下命令并回车&am…

基于SpringBoot的美食点评系统

1.引言 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 美食点评管理系统&#xff0c;主要的模块包括首页、个人中心、用户管理、餐厅管理、美食餐厅管理、地区管理、菜系管理、餐厅点评管理、系统…

集成铁电存储器MCU之物联网应用

优势: 集成铁电存储器的MCU&#xff0c;由于在MCU上集成了铁电存储器&#xff0c;该产品数据写入速度比基于闪存和EEPROM的MCU快100倍,功耗降低250倍。它还可在所有的电源模式中提供数据保存功能、支持超过100万亿次的写入次数、并为开发人员提供了一个全新的灵活度&#xff0…

【uniapp 开发小程序】购物车功能,实现全选、反选、单选、计算总价

小程序购物车功能&#xff1a; <template><view><view class"goodlistItem" v-for"(item,index) in goodList" :keyindex><view class"group"><checkbox-group change"changeitem(item)" checked class&q…

element-ui中el-table设置固定高度后,底部合计栏被遮盖

如图: 解决办法:el-table加上ref"summaryTab",然后在自定义合计计算方法getSummaries中加上如下代码就ok了 this.$nextTick(() > {this.$refs.summaryTab.doLayout(); }); 没用使用自定义合计计算函数的,也可以写在updated中,如下: updated() {this.$nextTick((…

在k8s上部署vue

1. dockerfile镜像文件编写 # 拉取 nginx镜像 FROM nginx:1.24.0# 拷贝 nginx 配置文件到 docker中 COPY nginx.conf /etc/nginx/nginx.conf# 拷贝vue打包后的文件到 docker中 COPY webapp /usr/share/nginx/html# 新增时区设置 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai…

最新Mac上如何安装pod

在Mac上安装CocoaPods需要使用Ruby&#xff0c;请按照以下步骤操作&#xff1a; 安装rvm&#xff0c;这是 Ruby Version Manager 的缩写&#xff0c;它是一个命令行工具&#xff0c;用于安装不同版本的 Ruby。打开终端并输入以下命令&#xff1a;$ curl -L https://get.rvm.io…

Java POI (2)—— Excel文件的上传与导出(实例演示)

一、单文件的上传功能 这里是一个demo的流程图&#xff0c;下面按照这个流程图做了一个简单的实现&#xff0c;有部分判断没有加上&#xff0c;实际操作中&#xff0c;可以根据自己的需求进行增加或者修改。并且此处还是在接受文件传入后将文件进行了下载&#xff0c;保存到本地…