笔试训练2

牛客.单词搜索 

刚开始我就想是搜索,但是不清楚bfs还是dfs更好,我尝试了bfs但是队列存东西,没有我想象的那么好写,所以我决定试试dfs 

import java.util.*;


public class Solution {
    static int m = 0;
    static  int n = 0;
    static int []dx = {1, -1, 0, 0};
    static int []dy = {0, 0, 1, -1};
    static boolean [][]vis;
    static char[]word;
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param board string字符串一维数组
     * @param word string字符串
     * @return bool布尔型
     */
    public static boolean exist (String[] board, String _word) {
        m = board.length;
        n = board[0].length();
        word = _word.toCharArray();
        char[][]a = new char[m][n];
        vis = new boolean[m][n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (board[i].charAt(j) == word[0]) {
                      vis[i][j] = true;    //标记
                    if (dfs(board, i, j, 0) == true) {
                        return true;
                    };
                       vis[i][j]=false;   //回溯
                }
            }
        }
        return false;
    }
    private static boolean dfs(String[] board, int i, int j, int pos) {
        if (pos == word.length - 1) {
            return true;
        }
        for (int ii = 0; ii < 4; ii++) {
            int x = i + dx[ii];
            int y = j + dy[ii];
//注意这里是pos+1传递的是第几个下标
            if (x >= 0 && x < m && y >= 0 && y < n && board[x].charAt(y) == word[pos + 1] &&
                    vis[x][y] == false) {
                vis[x][y] = true;     //标记
                if ( dfs(board, x, y, pos + 1) == true) {
                    return true;
                };
                vis[x][y] = false;    //回溯
            }
        }
        return false;
    }
}

牛客.杨辉三角

还想起来我第一次处理这个的时候,怎么想也不知道怎么写,那时候我是大一下学期刚学数据结构,然后到了今天,虽然我不是特别厉害,但是还是有所进步的,这个问题的想法,由于它是由上一行的这个和上一行的左边这个加一起,我的想法瞬间就想起来了dp,于是使用了dp处理这个问题

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int a = scanner.nextInt();
        int[][]b = new int[a + 1][a + 1];
        for (int i = 0; i <= a; i++)
            b[i][0] = 1;
        for (int i = 1; i <= a; i++) {
            for (int j = 1; j <= i; j++) {
                b[i][j] = b[i - 1][j - 1] + b[i - 1][j];
            }
        }


        for (int i = 0; i < a; i++) {
            for (int j = 0; j <= i; j++) {

                if (b[i][j] != 0) {
                    StringBuffer ret = new StringBuffer();
                    int len = Integer.toString(b[i][j]).length();
                    for (int k = 0; k < 5 - len; k++)
                        ret.append(" ");
                    System.out.print(ret.toString() + b[i][j]);
                }
            }
            if (i + 1 != a)
                System.out.println();
        }
    }
}

牛客.游游的you

输入输出是因为我想熟悉一下模版,这道题,不用也可以。就是看连续的o就-1,先找对应的you,再去找oo 

import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.BufferedWriter;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static PrintWriter out = new PrintWriter(new BufferedWriter(
                new OutputStreamWriter(System.out)));
    public static void main(String[] args)throws  IOException {
        Read scanner = new Read();
        int a1 = scanner.nextInt();
        int[][] a = new int[a1][3];
        int[] dp = new int[a1];
        int[] count = new int[a1];
        for (int i = 0; i < a1; i++) {
            int min = Integer.MAX_VALUE;
            for (int j = 0; j < 3; j++) {
                a[i][j] = scanner.nextInt();
                min = Math.min(a[i][j], min);
            }
            count[i] = a[i][1];
            dp[i] = min;
        }
        int sum = 0;
        for (int i = 0; i < a1; i++) {
            if (count[i] - dp[i] - 1 <= 0)
                sum = dp[i] * 2;
            else sum = dp[i] * 2 + (count[i] - dp[i] - 1) ;
 System.out.println(sum);
        }
        // 注意 hasNext 和 hasNextLine 的区别
    }
}
class Read {
    StringTokenizer st = new StringTokenizer("");
    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    String next()throws IOException {
        while (!st.hasMoreTokens()) {
            st = new StringTokenizer(bf.readLine());
        }
        return st.nextToken();
    }
    String nextLine()throws IOException {
        return bf.readLine();
    }
    int nextInt() throws IOException {
        return Integer.parseInt(next());
    }
    long nextLong()throws IOException {
        return Long.parseLong(next());
    }
    double nextDouble()throws IOException {
        return Double.parseDouble(next());
    }
}

牛客.腐烂的苹果

常规的bfs,使用vis来标记,然后就直接宽度搜索,用一个队列,放循环里面,然后,分两块往下面遍历(因为这是1s,所以把它放到sz出去,因为这个sz的作用是用来,统计一个烂苹果能感染多少组好苹果,然后把这些好苹果放到里面) 

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param grid int整型ArrayList<ArrayList<>>
     * @return int整型
     */
    static  int []dx = {0, 0, 1, -1};
    static  int []dy = {1, -1, 0, 0};


    public static int rotApple (ArrayList<ArrayList<Integer>> grid) {
        int m = grid.size();
        int n = grid.get(0).size();
        int ret = 0;
        boolean[][]vis = new boolean[m][n];
        Queue<int[]>q = new LinkedList<>();
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (grid.get(i).get(j) == 2) {
                    q.add(new int[] {i, j});
                    vis[i][j] = true;
                }
            }
        }

        while (!q.isEmpty()) {
            int sz = q.size();
            while (sz > 0) {
                int []k = q.poll();
                sz--;
                for (int i = 0; i < 4; i++) {
                    int x = dx[i] + k[0];
                    int y = dy[i] + k[1];
                    if (x >= 0 && x < m && y >= 0 && y < n && grid.get(x).get(y) == 1 &&
                            vis[x][y] == false) {
                        q.add(new int[] {x, y});
                        vis[x][y] = true;
                    }
                }
            }
            ret++;
        }
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (grid.get(i).get(j) == 1 && vis[i][j] == false) {
                    return -1;
                }
            }
        }
        return ret - 1;

    }
    // write code her
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【AIGC】FaceChain:发挥生成式内容的无限可能性

基于图像生成的个性化肖像框架 摘要 FaceChaine提供了一系列的生成方案&#xff0c;通过少量的图像输入&#xff0c;就能生成逼真的个性化肖像。它是一个个性化肖像生成框架&#xff0c;包含丰富的人脸感知相关的模型&#xff0c;例如人脸检测&#xff0c;深度人脸向量提取&am…

【算法】合并两个有序链表(easy)——递归算法

题解&#xff1a;合并两个有序链表(easy)——递归求解 目录 1.题目2.题解3.参考代码4.总结 1.题目 题目链接&#xff1a;LINK 2.题解 本题有两种解法&#xff0c; 一是用循环去处理 链接&#xff1a;【刷题记录】合并两个有序数组、移除元素二是用递归去处理 将在下面中说…

23、linux系统文件和日志分析

linux文件系统与日志分析 文件时存储在硬盘上的&#xff0c;硬盘上的最小存储单位是扇区&#xff0c;每个扇区大大小是512字节。 inode&#xff1a;元信息&#xff08;文件的属性 权限&#xff0c;创建者&#xff0c;创建日期等&#xff09; block&#xff1a;块&#xff0c…

Java 22的FFM API,比起Java 21的虚拟线程

哪个对Java未来的发展影响更大&#xff1f;两个 Java 版本中的重要特性&#xff1a;Java 21 的虚拟线程和 Java 22 的 FFM API。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给…

fintuning chatglm3

chatglm3介绍 ChatGLM3-6B 是 ChatGLM 系列最新一代的开源模型&#xff0c;在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上&#xff0c;ChatGLM3-6B 引入了如下特性&#xff1a; 更强大的基础模型&#xff1a; ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用…

2、浮动的用法特点,解决父元素高度塌陷解决

一、浮动 用法&#xff1a;浮动就是使用float样式&#xff0c;使元素脱离文档流。属性值有三个&#xff1a;none默认left right 特点&#xff1a; 常用于文字环绕图片浮动的元素脱离文档流影响其他元素排列造成父元素高度塌陷 1、一旦元素设置了浮动&#xff0c;元素就会脱离…

【教程】20个高级 Python 函数,让你编程更高效

在Python的编程世界中,函数是我们编写代码的重要工具之一。除了常见的内置函数外,Python还提供了许多强大而有趣的高级函数,它们可以帮助我们简化代码、提升效率,甚至在某些情况下让编程变得更加有趣。让我们一起来探索这些高级函数的奇妙之处吧! 1.enumerate() – 枚举函…

VBA字典与数组第十五讲:多行多列数组与同列数单行数组间的运算规则

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…

【Intro】Heterogeneous Graph Attention Network(HAN)

论文链接&#xff1a;https://arxiv.org/pdf/1903.07293 Abstract 异构性和丰富的语义信息给面向异构图的图形神经网络设计带来了巨大的挑战。 -> 一种基于分层注意的异构图神经网络&#xff0c;包括节点级注意和语义级注意。具体来说&#xff0c;节点级关注旨在学习节点…

Anolis OS 8.9安装Linux 服务器运维管理面板“1Panel”

一、简介 1.Linux 服务器运维管理面板“1Panel” 使用go语言编写 2.很多的项目的应用都是采用 docker 技术来实现&#xff0c;这让 Linux 服务器的运维管理更简单、更安全。 3.1Panel 采纳最新的前端技术&#xff0c;并通过精心设计的UX 交互&#xff0c;为用户提供更好的用户…

从0开始学统计-什么是回归?

1.什么是回归&#xff1f; 回归&#xff08;Regression&#xff09;是统计学中一种用于探索变量之间关系的分析方法。它主要用于预测一个或多个自变量&#xff08;输入变量&#xff09;与因变量&#xff08;输出变量&#xff09;之间的关系。在回归分析中&#xff0c;我们尝试根…

数学建模--特殊的图

目录 1.二部图 &#xff08;1&#xff09;简单认识 &#xff08;2&#xff09;定义 &#xff08;3&#xff09;判定定理 &#xff08;4&#xff09;定理理解 2.匹配问题 &#xff08;1&#xff09;匹配 &#xff08;2&#xff09;完备&&完美匹配 &#xff08;3…

力扣20 有效的括号

给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括…

Linux线程:线程分离

目录 一、什么是线程分离 1.1pthread_detach 1.2pthread线程库存在的意义 1.3__thread线程的局部存储 1.4系统调用clone 一、什么是线程分离 1.1pthread_detach 默认情况下&#xff0c;新创建的线程是joinable的&#xff0c;线程退出后&#xff0c;需要对其进行pthread_joi…

视频SK配置教程

视频SK配置教程 提供的pika接口服务&#xff08;国外的&#xff0c;所以要反代&#xff09;&#xff0c;创建一个pika账号并开通pika套餐 反向配置教程 https://blog.csdn.net/u012241616/article/details/139391954?spm1001.2014.3001.5502 1、进入站点后台->功能->…

ubuntu使用

使用ubuntu 安装ubuntu ubuntu的镜像 : http://mirrors.aliyun.com/ubuntu-releases/ 进入 vmware https://www.vmware.com/products/workstation-player/workstation-player-evaluation.html 点击 创建 浏览 找到 系统镜像文件, 我把它放在了 vmware文件下 设置好信息 , 记…

【GIS系列】挑战千万级数据:Java和Elasticsearch在GIS中的叠加分析实践

作者&#xff1a;后端小肥肠 创作不易&#xff0c;未经允许严禁转载。 目录 1. 前言 2. 叠加分析场景方案对比 2.1. Geotools 2.2. PostGIS 2.3. Elasticsearch 3. 基于ElastcSearch实现叠加分析代码实践 3.1. 开发环境搭建 3.1.1. 所需版本和工具 3.1.2. pom依赖 3.…

基于数据驱动的自适应性小波构造(MATLAB)

以地震领域为例&#xff0c;时频变换能够刻画地震资料的时频特征&#xff0c;进而辅助地质构造解释。在各种时频分析工具中&#xff0c;连续小波变换CWT是描述地震资料时频特征的常用工具。选择合适的基小波是CWT的关键问题。对于不同类型的信号前人有针对性的设计了许多基小波…

Virtualbox中对SD卡进行格式化和分区

系统&#xff1a;Ubuntu 22.04.4 LTS 方法一&#xff1a;在虚拟机的ubuntu系统中使用fdisk命令方式分区&#xff0c;具体请参考&#xff1a; imx6ull - 制作烧录SD卡-CSDN博客 方法二&#xff1a;使用Ubuntu自带GUI工具Disks Disks相比命令行工具更加简单无脑&#xff0c;用…

esp8266刷micropython固件

硬件&#xff1a;ESP-01 1M FLASH 乐鑫官方刷写工具&#xff1a;https://www.espressif.com.cn/sites/default/files/tools/flash_download_tool_3.9.6_2.zip 最新micropython固件: flash<512:https://micropython.org/resources/firmware/ESP8266_GENERIC-FLASH_512K-20…