牛客练习小题

news2024/9/23 7:31:20

目录

牛客. 矩阵最长递增路径

牛客.奇数位丢弃

牛客.天使果冻

牛客.dd爱旋转 


牛客. 矩阵最长递增路径

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 递增路径的最大长度
     * @param matrix int整型二维数组 描述矩阵的每个数
     * @return int整型
     */
     static int []dx={0,0,1,-1};
     static int []dy={1,-1,0,0};
     static int n;
     static int m;
     static int[][]dp=new int[10004][1004];
     public static int dfs(int[][]matrix,int p1,int p2){
        int len=1;
        if(dp[p1][p2]!=0){
            return dp[p1][p2];
        }
     for(int i=0;i<4;i++){
        int x=p1+dx[i];
        int y=p2+dy[i];
        if(x>=0&&x<n&&y>=0&&y<m&&matrix[x][y]<matrix[p1][p2]){
            len=Math.max(len,dfs(matrix,x,y)+1);
        }
     }
     dp[p1][p2]=len;
     return len;
     }
    public int solve (int[][] matrix) {
        int ret=0;
         n=matrix.length;
         m=matrix[0].length;
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
              ret=Math.max(ret,dfs(matrix,i,j));
            }
        }
        return ret;
    }
}

牛客.奇数位丢弃

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int n = in.nextInt();
            int ret=1;
            //找到所有2^x-1最大的时候
            while(ret-1<=n) ret*=2;
            //在最后ret是等于>n的2^x次幂,我们需要把这个幂,进行除2,然后-1,因为ret代表的是2^x
            System.out.println(ret/2-1);

           
        }
    }
}

牛客.天使果冻

假如说问一遍,我们就排序一遍,那么耗费时间度就是n*q

这样是会超时的,所以预处理

采用g[i]:来存这个某一个位置的次大值

那么下次问,就是O(q)了。

如何在一堆数字中,求出第二大/小的值

f[i]来表示当前位置的最大值

import java.util.*;
public class Main{
    public static void main(String[]args){
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int[]a=new int[n];
        for(int i=0;i<n;i++){
            a[i]=in.nextInt();
        }
        int q=in.nextInt();
        int []f=new int[n];
        int []g=new int[n];
        f[0]=a[0];
        //注意初始化,最大值,以及次大值,最大值默认第一个有数字就行
        //次大值只有一个数字,没有次大值,无穷小,默认为0;
        for(int i=1;i<n;i++){
            f[i]=Math.max(f[i-1],a[i]);
            if(a[i]>=f[i-1]){
                g[i]=f[i-1];
            }else if( a[i]<f[i-1]&&a[i]>=g[i-1]){
                g[i]=a[i];   
            }else{
                g[i]=g[i-1];
            }
        }
        while(q>0){
            int x=in.nextInt();
            System.out.println(g[x-1]);
            q--;
        }
        
        
        
        
    }
}

牛客.dd爱旋转 

一定是模拟,但是开始的时候,我没想到怎么做

这么做,+快速读写

import java.util.*;
import java.io.*;
public class Main{
    public static PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
    public static Read in=new Read();
    public static void main(String[]args) throws IOException{
        int n = in.nextInt();
        int[][] a = new int[n][n];
        Stack<Integer> s = new Stack<>();
        Queue<Integer> qlist = new LinkedList<>();
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                a[i][j] = in.nextInt();
                s.add(a[i][j]);
            }
        }
    
        int q = in.nextInt();
        int count1 = 0;
        int count2 = 0;
        while (q != 0) {
            int x = in.nextInt();
            if (x == 1) {
                count1++;
            }//当他等于2的时候
            else {
                count2++;
            }
            q--;
        }
        if (count1 % 2 != 0) {
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    a[i][j] = s.pop();
                }
            }
        }
        if (count2 % 2 != 0) {
                for (int i = n - 1; i >= 0; i--) {
            for (int j = 0; j < n; j++) {
                qlist.add(a[i][j]);
            }
        }
                       
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    a[i][j] = qlist.poll();
                }
            }
        }
        
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                out.print(a[i][j] + " ");
            }
           out.println("");
        }
           out.close();  
    }
  
    }
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();
    }
    int nextInt() throws IOException{
        return Integer.parseInt(next());
    }
}

上面和下面的换

import java.util.*;
import java.io.*;
public class Main{
    public static PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
    public static Read in=new Read();
   static  int[][]a;
   static int n=0;
   static  void setRow(){
        for(int i=0; i<n/2;i++){
            for(int j=0;j<n;j++){
                //行交换
                int tmp=a[i][j];
                a[i][j]=a[n-1-i][j];
                a[n-1-i][j]=tmp;
            }
        }
    }
   static void setCol(){
        //列交换
        for(int j=0;j<n/2;j++){
            for(int i=0;i<n;i++){
                //行不变,列变成n-1-j
                int tmp=a[i][j];
                a[i][j]=a[i][n-1-j];
                a[i][n-1-j]=tmp;
            }
        }
    }
    
    
    
    
    
    public static void main(String[]args) throws IOException{
        n = in.nextInt();
        a = new int[n][n];
        Stack<Integer> s = new Stack<>();
        Queue<Integer> qlist = new LinkedList<>();
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                a[i][j] = in.nextInt();
            }
        }
    
        int q = in.nextInt();
        int row = 0;
        int col = 0;
        while (q != 0) {
            int x = in.nextInt();
            if (x == 1) {
                row++;
                col++;
            }//当他等于2的时候
            else {
                row++;
            }
            q--;
        }
        if (row % 2 != 0) {      setRow();        }
        if (col % 2 != 0) {      setCol(); }
        
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                out.print(a[i][j] + " ");
            }
           out.println("");
        }
           out.close();  
    }
  
    }
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();
    }
    int nextInt() throws IOException{
        return Integer.parseInt(next());
    }
}

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

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

相关文章

【C++ Primer Plus习题】3.5

问题: 解答: #include <iostream> using namespace std;int main() {long long populationWorld 0;long long populationChina 0;cout << "请输入全球的人口数:";cin >> populationWorld;cout << "请输入中国的人口数:";cin &g…

【STM32】RTT-Studio中HAL库开发教程五:UART的DMA应用

文章目录 一、简介1.关于DMA2.DMA使用场景3.DMA控制结构4.IDLE空闲中断5.实现方法 二、RTT配置三、串口收发流程四、完整代码五、测试验证 一、简介 1.关于DMA DMA(Direct Memory Access&#xff0c;直接存储器访问) 是所有现代电脑的重要特色&#xff0c;它允许不同速度的硬件…

谷粒商城实战笔记-249-商城业务-消息队列-RabbitMQ工作流程

文章目录 一&#xff0c;基本概念二&#xff0c;消息从producer到consumer的过程 一&#xff0c;基本概念 RabbitMQ是一个流行的开源消息代理软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;。以下是RabbitMQ的一些基本概念&#xff1a; Broker&#x…

真题解析 | CCF CSP-J 2020 入门级 C++语言真题及答案

一、单项选择题(共15题&#xff0c;每题2分&#xff0c;共计30分;每题有且仅有一个正确选项) 解析&#xff1a;常识题。在计算机内存中&#xff0c;每个存储单元都有一个唯一的标识号&#xff0c;这个标识号被称为地址。地址用来唯一标识内存中的每个存储单元&#xff0c;类似于…

【Stream】流媒体从入门到入土 (1)

最近工作需要学了很多流媒体相关的知识&#xff0c;谁能想象一个月前还是只听说过 HLS 的快乐小屁孩&#xff0c;现在已经背负了巨大的知识的重担了&#xff0c;头发也秃了几根&#xff0c;发际线严重后移 H.264 (AVC) vs H.265 (HEVC) H.264 和 H.265 是两种视频编码&#x…

【学习笔记】Day 22

一、进度概述 1、机器学习常识23-24&#xff0c;以及相关代码复现 2、python 补完计划&#xff08;详见 python 专题&#xff09; 二、详情 23、U-Net 从宏观结构上来讲&#xff08;以下摘自常识23&#xff09;&#xff1a; U-Net 就是 U 形状的网络, 前半部分 (左边…

[Android studio]无法联网

问题情景&#xff1a; 我的Android studio 更新软件到 Android Studio Koala | 2024.1.1 Patch 1 这个版本后&#xff0c;当前的项目无法正常编译。 因为之前有次更新版本后&#xff0c;我也遇到这个无法编译的问题&#xff0c;后面给解决掉了。想着这次应该也没有事情。 可这…

【通信协议】SPI总线

目录 SPI简介 硬件电路 SPI模式 软件模拟初始化 时序基本单元 起始条件 终止条件 发送与接收 SPI基本单元代码 MySPI.h MySPI.c SPI简介 SPI&#xff08;Serial Peripheral Interface&#xff09;&#xff0c;即串行外围设备接口&#xff0c;是由Motorola公司开…

在 FPGA 上实现以太网的“低级”指南

如今&#xff0c;我们日常的网络连接大多是通过无线方式进行的&#xff0c;因此很容易忘记以太网。但它仍然是一种有用的标准&#xff0c;是一个可靠的高吞吐量网络链接的好方法。为此&#xff0c;[Robert Feranec] 和 [Stacy Rieck] 编写了一个关于如何在 FPGA 上使用以太网的…

uniapp实现苹果账号登录

appleLogin(){uni.showToast({title: 正在进行苹果账户登录...,icon: none})uni.login({provider: apple,success: (loginRes) > {uni.getUserInfo({provider: apple,success: async(userInfoRes) > {console.log(用户信息, userInfoRes)// userInfoRes.userInfo.identit…

Python和MATLAB和R对比敏感度函数导图

&#x1f3af;要点 深度学习网络两种选择的强制选择对比度检测贝叶斯自适应估计对比敏感度函数空间观察对比目标量化视觉皮质感知差异亮度、红/绿值、蓝/黄值色彩空间改变OpenCV图像对比度对比敏感度函数模型空间对比敏感度估计眼球运动医学研究空间时间颜色偏心率对比敏感度函…

技术债务已接管经济

“技术债务”一词通常指软件开发过程中的捷径或次优方法。它表现为设计不良的代码、缺乏文档和过时的组件。虽然正确编写的代码和文档是永恒的&#xff0c;但组件和方法却不是。随着时间的推移&#xff0c;软件及其组件可能会成为技术债务。自 40 年前的 20 世纪 80 年代软件行…

Qt使用usbcan通信

一.usbcan环境搭建 可以参照我的这篇博客&#xff1a;USBCAN-II/II使用方法以及qt操作介绍 二.项目效果展示 三.项目代码 这部分代码仅仅展示了部分功能&#xff0c;仅供参考。 #include"ControlCAN.h" #include<QDebug> #include <windows.h> #incl…

位运算,CF 878A - Short Program

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 878A - Short Program 二、解题报告 1、思路分析 顺序处理每个操作&…

数据结构(双向链表)代码详细注释

双向链表 1》双向链表的定义 双向链表也叫双链表&#xff0c;与单向链表不同的是&#xff0c;每一个节点有三个区域组成&#xff1a;两个指针域&#xff0c;一个数据域。 前指针域&#xff1a;存储前驱节点的内存地址 后指针域&#xff1a;存储后继节点的内存地址 数据域&…

Oracle归档日志满了,导致程序打不开,如何解决。

加油&#xff0c;新时代打工人&#xff01; 归档日志错误&#xff0c;登录不上&#xff0c;只能用system 角色登录&#xff0c; 错误提示 oracle 错误257 archiver error connect internal only until freed 解决cmd进入rman RMAN&#xff08;Recovery Manager&#xff09;是一…

喜报 | 麒麟信安“信创云桌面解决方案”在浙江省委党校应用实施,荣膺国家级示范案例

近日&#xff0c;国家工信部网络安全产业发展中心公布了2023年信息技术应用创新解决方案入围获奖名单&#xff0c;麒麟信安“信创云桌面解决方案”在浙江省委党校成功应用实施&#xff0c;获评国家工信部2023年信息技术应用创新解决方案党务政务领域应用示范案例。 据悉&#…

Python、R用RFM模型、机器学习对在线教育用户行为可视化分析|附数据、代码

全文链接&#xff1a;https://tecdat.cn/?p37409 分析师&#xff1a;Chunni Wu 随着互联网的不断发展&#xff0c;各领域公司都在拓展互联网获客渠道&#xff0c;为新型互联网产品吸引新鲜活跃用户&#xff0c;刺激用户提高购买力&#xff0c;从而进一步促进企业提升综合实力和…

Linux--进程管理和性能相关工具

文章目录 进程状态进程的基本状态其他更多态运行(Running或R)可中断睡眠(Interruptible Sleep 或 S)不可中断睡眠(Uninterruptible Sleep 或 D)停止(Stopped 或 T)僵尸(Zombie 或 Z) 状态转换 进程管理相关工具进程树pstreepstree -ppstree -T 进程信息psps输出属性查看进程的父…

C语言-从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test中保存,输人的字符串以“!”结束

题目要求&#xff1a; 从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test中保存,输人的字符串以"!”结束 1.实现程序&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {FILE* fp fopen("…