当前位置: 首页 > news >正文

牛客笔试训练

 牛客.过桥

在函数

 public static int n;public static  int[]arr=new int[2001];public static int bfs(){int left=1;int right=1;int ret=0;while(left<=right){ret++;int r=right;for(int i=left;i<=right;i++){r=Math.max(r,arr[i]+i);if(r>=n){return ret;}}left=right+1;right=r;}return -1;}public  static void main(String[]args){Scanner in=new Scanner(System.in);n=in.nextInt();for(int i=1;i<=n;i++){arr[i]=in.nextInt();}System.out.println(bfs());} 

不在函数中,

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+1];for(int i=1;i<=n;i++){a[i]=in.nextInt();}int left=1;int right=1;int flag=0;int sum=0;
//这个只是提供循环次数,说是具体作用,实则不大while(left<=right){int r=right;sum++;
//这块是规定范围,并且在范围内,准备更新新的右侧范围,因为i+a[i]是区间内能达到的最大值for(int i=left;i<=right;i++){if(r<i+a[i]){r=i+a[i];}}if(r>=n){break;}
//left更新成right+1left=right+1;
//right更新成最新的r位置,下一次遍历就可以直接获取最大的位置了right=r;if(left>right){flag=1;break;}}if(flag==1){System.out.println(-1);}else{System.out.println(sum);}} 
}

牛客.最大差值

正确答案

public int getDis (int[] A, int n) {int min=A[0];int max=0;for(int i=0;i<n;i++){//无论如何我们都是先找到最小值,然后不断的减去,来求最大值,而不是单纯的求最大值和最小值,这里面max代表的是最大差值min=Math.min(min,A[i]);max=Math.max(A[i]-min,max);}return max;}

时间过于复杂,于是研究了上面的操作 

public int getDis (int[] A, int n) {int sum=0;for(int a=0;a<n;a++){for(int b=a;b<n;b++){sum=Math.max(A[b]-A[a],sum);}}return sum;}

牛客.兑换零钱(一)(完全背包问题)

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** 最少货币数* @param arr int整型一维数组 the array* @param aim int整型 the target* @return int整型*/public int minMoney (int[] arr, int aim) {int n=arr.length;//dp表,动态规划:[0,i]位置组成总和为j的最小质数.int[][]dp=new int[n+1][aim+1];for(int i=0;i<=aim;i++){dp[0][i]=0x3f3f3f3f;}dp[0][0]=0;if(aim==0){return 0;}for(int i=1;i<=n;i++){for(int j=1;j<=aim;j++){dp[i][j]=dp[i-1][j];if(j-arr[i-1]>=0){dp[i][j]=Math.min(dp[i][j-arr[i-1]]+1,dp[i-1][j]);}}}if(dp[n][aim]==0x3f3f3f3f){return -1;}return dp[n][aim];}
}

牛客.循环汉诺塔

代码实现很容易,要看图

往下就可以找到规律了,至于为什么最开始那两个不一样,是因为最开始的x和1是相同的,我们要以大多数情况为基准


http://www.mrgr.cn/news/11080.html

相关文章:

  • python-Flask 全方位指南:从入门到模块化开发与代码保护
  • Django | 从中间件的角度来认识Django发送邮件功能
  • 从数据生成到图数据库:Linux下Neo4j的CSV导入
  • 双非地信(gis)研究生好的就业意见有哪些
  • VUE使用websocket
  • 环境模拟新篇章:GMS地下水数值模拟技术
  • 不使用 JS 纯 CSS 获取屏幕宽高
  • 关于el-table的扩展表格expand
  • Clickhouse集群化(三)集群化部署
  • 周报(8.12-8.18)
  • SystemTap(stap)架构和原理介绍,以及脚本编写举例
  • 动手学深度学习7.7. 稠密连接网络(DenseNet)-笔记练习(PyTorch)
  • OpenCV杂项图像变换(1)自适应阈值处理函数adaptiveThreshold()的使用
  • 【STM32】时钟体系
  • 本地部署docker文档
  • Windows10安装Docker详细图解
  • 数据赋能(187)——开发:数据产品——概述、关注焦点
  • 系规学习第17天
  • Android 设备上运行轻量级 LLM 指南
  • 小山菌_代码随想录算法训练营总结篇