顶点 java笔试_3-29 百度 笔试 java后台开发,三道题AC答案

做题的时候写的很匆忙,没有优化,大佬们可以指出(PS: 互联网大厂最后一题经常出图论题目,我最近总是遇到)

题目描述大家可以看16楼

第一题:

由于

n和n-1一定互质,所以直接返回  n*(n-1) -1

注意用

long保存答案,使用int,乘法运算会溢出(python用户可以窃喜)

import java.util.Scanner;

public class Solution1 {

public static void main(String[] args) {

Scanner s = new Scanner(System.in);

long n=s.nextLong();

System.out.print((n-1)*n-1);

}

} 第二题:

模拟法,每次选取最大的一项的值为max;更新最大项max=max%N;  其余每项加上 max/N;

一直循环到满足题目要求,数组每项都小于N

import java.util.Scanner;

public class Solution2 {

public static void main(String[] args) {

Scanner s = new Scanner(System.in);

int N = s.nextInt();

long[] nums=new long[N];

long sum=0;

for (int i = 0; i 

nums[i]=s.nextLong();

}

while(!isValid(nums)){

long max=0;

int index=0;

for (int i = 0; i 

if(max

max=nums[i];

index=i;

}

}

sum+=max/N;

for (int i = 0; i 

nums[i]+=max/N;

}

nums[index]=max%N;

}

System.out.println(sum);

}

public static boolean isValid(long[] nums){

boolean res=true;

for(long l:nums){

if(l>=nums.length){

res=false;

}

}

return res;

}

} 第三题:

当做图模型来解题,求图中权值递增的最长路径;根据题意,图中只有N-1条边,且无法从权值大的点走到权值小的点,因此遍历图的时候,并不会出现“往回走”,“死循环”的问题

所以这里可以直接用深度优先遍历

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

public class Solution3 {

static int max=0;

public static void main(String[] args) {

Scanner s=new Scanner(System.in);

int N=s.nextInt();

int[] nums=new int[N+1];

for (int i = 1; i 

nums[i]=s.nextInt();

}

List[] graph=new ArrayList[N+1];

for(int i=0;i

graph[i]=new ArrayList<>();

}

for (int i = 0; i 

int l=s.nextInt();

int r=s.nextInt();

graph[l].add(r);

graph[r].add(l);

}

for (int i = 1; i 

dfs(graph,nums,i,0);

}

System.out.println(max);

}

public static void dfs(List[] graph,int[] nums,int now,int len){

len+=1;

max=Math.max(max,len);

List nexts=graph[now];

for (int next:nexts ) {

if(nums[next]>nums[now]){

dfs(graph,nums,next,len);

}

}

}

}

找实习/工作不容易,楼主投简历时也很紧张,心态经常起伏,与大家共勉,祝大家都能拿到满意的offer。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
详细解释下面的代码,具体到各个参数的含义和作用#ifndef MESH_H #define MESH_H #include <QOpenGLShaderProgram> #include <QOpenGLFunctions_3_3_Core> #include <string> #include <vector> #include <QOpenGLTexture> using namespace std; struct Vertex { QVector3D Position; QVector3D Normal; QVector2D TexCoords; }; struct Texture { unsigned int id; string type; string path; }; class Mesh { public: Mesh(){}; // mesh data vector<Vertex> vertices; vector<unsigned int> indices; vector<Texture> textures; void Draw(QOpenGLShaderProgram &shader); void Draw(QOpenGLShaderProgram &shader, QString type); Mesh(QOpenGLFunctions_3_3_Core *glFuns, vector<Vertex> vertices, vector<unsigned int> indices, vector<Texture> textures); private: // render data unsigned int VAO, VBO, EBO; void setupMesh(); private: QOpenGLFunctions_3_3_Core *m_glFuns; QOpenGLTexture *m_STLDiffuseTex; }; #endif//MESH_H void Mesh::setupMesh() { //创建VBO和VAO对象,并赋予ID m_glFuns->glGenVertexArrays(1, &VAO); m_glFuns->glGenBuffers(1, &VBO); m_glFuns->glGenBuffers(1,&EBO); //绑定VBO和VAO对象 m_glFuns->glBindVertexArray(VAO); m_glFuns->glBindBuffer(GL_ARRAY_BUFFER, VBO); //为当前绑定到target的缓冲区对象创建一个新的数据存储。 //如果data不是NULL,则使用来自此指针的数据初始化数据存储 m_glFuns->glBufferData(GL_ARRAY_BUFFER, vertices.size()*sizeof(Vertex), &vertices[0], GL_STATIC_DRAW); m_glFuns->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); m_glFuns->glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(unsigned int),&indices[0], GL_STATIC_DRAW); //告知显卡如何解析缓冲里的属性值 m_glFuns->glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0); m_glFuns->glEnableVertexAttribArray(0); m_glFuns->glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, Normal)); m_glFuns->glEnableVertexAttribArray(1); m_glFuns->glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, TexCoords)); m_glFuns->glEnableVertexAttribArray(2); }
最新发布
06-02

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值