您的位置:首页 > 编程语言 > Java开发

美团点评2018提前批笔试题1 最长子序列 -- JAVA 进阶

2017-09-01 10:23 330 查看
刚刚参加了美团点评2018招聘 提前批的笔试

有两个编程题 具体的题目记不太清了 不过大致的意思就是输入一个序列长度N 并依次填充序列 最后给定一个值K,在序列的任意长度子序列中 只要有各项和是K的倍数,则输出子序列的长度。如输入 5(长度) { 1,2,3,4,5 } (序列P) 5(K) 符合题意的子序列有:{ 5 }、{ 1,2,3,4 }、{ 2,3},{ 1,2,3,4,5 } 则输出长度为5。

代码提交之后通过率为83%,找了半天也不知道哪里有问题。。。。。。。。。。。。。

题目分析:其实就是做一个双重循环 依次从每个元素开始,遍历至最后一个元素 并计算各元素和 对K取余 满足则判断最大长度

import java.util.Scanner;

public class Main{
private static int getMaxNum(int[] num, int k) {
// TODO Auto-generated method stub
int len =num.length;
int[] result = new int[len];//创建临时数组每次使用
int temsum=0,maxsum=0;
if(len==1&&num[0]%k==0){
return 1;
}
for(int i=0;i<len;i++){
temsum =0;
for(int m=0;m<len;m++){
result[m] =num[m];  //每次初始化临时数组
}
if(num[i]%k==0){
temsum = 1;
}
for(int j=i+1;j<len;j++){
result[j]+=result[j-1];//对从i开始后的元素依次累加求和
if(result[j]%k==0){//判断是否为K的倍数并分析是否为最大长度
temsum =j-i+1;
if(temsum>=maxsum){
maxsum =temsum;
}
}
}
}
return maxsum;
}
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
int[] num = new int
;
for(int i=0;i<n;i++){
num[i] = sc.nextInt();
}
int k = sc.nextInt();
System.out.println(getMaxNum(num,k));
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息