蓝桥 算法训练 区间k大数查询(Java)
2018-03-29 22:43
190 查看
import java.util.Arrays;
import java.util.Scanner;
/*
* 问题描述
给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。
输入格式
第一行包含一个数n,表示序列长度。
第二行包含n个正整数,表示给定的序列。
第三个包含一个正整数m,表示询问个数。
接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。
输出格式
总共输出m行,每行一个数,表示询问的答案。
样例输入
5
1 2 3 4 5
2
1 5 2
2 3 2
样例输出
4
2
数据规模与约定
对于30%的数据,n,m<=100;
对于100%的数据,n,m<=1000;
保证k<=(r-l+1),序列中的数<=106。
*/
public class Main {
static void f(int a[] , int l , int r , int k) {
StringBuffer sBuffer = new StringBuffer();
for(int i = 0;i<a.length;i++) {
sBuffer.append(a[i]);
}
String s1 = sBuffer.toString();
String s2 = s1.substring(l-1, r);
char c[] = s2.toCharArray();
Arrays.sort(c);
int v=(int)c[c.length-k]-48; //(1)将字符赋给了一个整型出现错误。
//原因:将字符赋给整型时需要进行转换,否则返回的为ACII值
System.out.println(v);
//(2)sort方法是将数组从小到大序列排,题目要求为从大到小
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int a[] = new int
;
for (int i = 0; i < a.length; i++) {
a[i] = in.nextInt();
}
int m = in.nextInt();
int b[] = new int [m*3];
for(int i=0;i<b.length;i++) {
b[i] = in.nextInt();
}
for(int i = 0;i<m;i++) {
f(a, b[3*i+0],b[i*3+1], b[i*3+2]); //(3)对于抽出数组中对应的数据时,算法出错
}
}
}
以上提交错误(未在做题前思考周全就开始做题,导致花费大量时间在修改根本不需要考虑的错误上)
import java.util.Arrays;
import java.util.Scanner;
/*
* 问题描述
给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。
输入格式
第一行包含一个数n,表示序列长度。
第二行包含n个正整数,表示给定的序列。
第三个包含一个正整数m,表示询问个数。
接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。
输出格式
总共输出m行,每行一个数,表示询问的答案。
样例输入
5
1 2 3 4 5
2
1 5 2
2 3 2
样例输出
4
2
数据规模与约定
对于30%的数据,n,m<=100;
对于100%的数据,n,m<=1000;
保证k<=(r-l+1),序列中的数<=106。
*/
public class Main {
static void f(int a[] , int l , int r , int k) {
int b[] = new int [r-l+1];
int num = 0;
for(int i = l-1 ; i<=r-1;i++) {
b[num] = a[i];
num++;
}
Arrays.sort(b);
int v=b[b.length-k]; //(1)将字符赋给了一个整型出现错误。
//原因:将字符赋给整型时需要进行转换,否则返回的为ACII值
System.out.println(v);
//(2)sort方法是将数组从小到大序列排,题目要求为从大到小
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int a[] = new int
;
for (int i = 0; i < a.length; i++) {
a[i] = in.nextInt();
}
int m = in.nextInt();
int b[] = new int [m*3];
for(int i=0;i<b.length;i++) {
b[i] = in.nextInt();
}
for(int i = 0;i<m;i++) {
f(a, b[3*i+0],b[i*3+1], b[i*3+2]); //(3)对于抽出数组中对应的数据时,算法出错
}
}
}
修改两分钟AC
以后给自己立个规矩,不管拿到什么题,首先先思考五分钟,逼着自己这样做,哪怕是水题也一样
import java.util.Scanner;
/*
* 问题描述
给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。
输入格式
第一行包含一个数n,表示序列长度。
第二行包含n个正整数,表示给定的序列。
第三个包含一个正整数m,表示询问个数。
接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。
输出格式
总共输出m行,每行一个数,表示询问的答案。
样例输入
5
1 2 3 4 5
2
1 5 2
2 3 2
样例输出
4
2
数据规模与约定
对于30%的数据,n,m<=100;
对于100%的数据,n,m<=1000;
保证k<=(r-l+1),序列中的数<=106。
*/
public class Main {
static void f(int a[] , int l , int r , int k) {
StringBuffer sBuffer = new StringBuffer();
for(int i = 0;i<a.length;i++) {
sBuffer.append(a[i]);
}
String s1 = sBuffer.toString();
String s2 = s1.substring(l-1, r);
char c[] = s2.toCharArray();
Arrays.sort(c);
int v=(int)c[c.length-k]-48; //(1)将字符赋给了一个整型出现错误。
//原因:将字符赋给整型时需要进行转换,否则返回的为ACII值
System.out.println(v);
//(2)sort方法是将数组从小到大序列排,题目要求为从大到小
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int a[] = new int
;
for (int i = 0; i < a.length; i++) {
a[i] = in.nextInt();
}
int m = in.nextInt();
int b[] = new int [m*3];
for(int i=0;i<b.length;i++) {
b[i] = in.nextInt();
}
for(int i = 0;i<m;i++) {
f(a, b[3*i+0],b[i*3+1], b[i*3+2]); //(3)对于抽出数组中对应的数据时,算法出错
}
}
}
以上提交错误(未在做题前思考周全就开始做题,导致花费大量时间在修改根本不需要考虑的错误上)
import java.util.Arrays;
import java.util.Scanner;
/*
* 问题描述
给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。
输入格式
第一行包含一个数n,表示序列长度。
第二行包含n个正整数,表示给定的序列。
第三个包含一个正整数m,表示询问个数。
接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。
输出格式
总共输出m行,每行一个数,表示询问的答案。
样例输入
5
1 2 3 4 5
2
1 5 2
2 3 2
样例输出
4
2
数据规模与约定
对于30%的数据,n,m<=100;
对于100%的数据,n,m<=1000;
保证k<=(r-l+1),序列中的数<=106。
*/
public class Main {
static void f(int a[] , int l , int r , int k) {
int b[] = new int [r-l+1];
int num = 0;
for(int i = l-1 ; i<=r-1;i++) {
b[num] = a[i];
num++;
}
Arrays.sort(b);
int v=b[b.length-k]; //(1)将字符赋给了一个整型出现错误。
//原因:将字符赋给整型时需要进行转换,否则返回的为ACII值
System.out.println(v);
//(2)sort方法是将数组从小到大序列排,题目要求为从大到小
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int a[] = new int
;
for (int i = 0; i < a.length; i++) {
a[i] = in.nextInt();
}
int m = in.nextInt();
int b[] = new int [m*3];
for(int i=0;i<b.length;i++) {
b[i] = in.nextInt();
}
for(int i = 0;i<m;i++) {
f(a, b[3*i+0],b[i*3+1], b[i*3+2]); //(3)对于抽出数组中对应的数据时,算法出错
}
}
}
修改两分钟AC
以后给自己立个规矩,不管拿到什么题,首先先思考五分钟,逼着自己这样做,哪怕是水题也一样
相关文章推荐
- 蓝桥杯算法训练 ALGO-1 区间k大数查询 Java
- 蓝桥杯 算法训练 区间k大数查询 JAVA
- 算法-蓝桥杯-算法训练 区间k大数查询(JAVA)
- 算法训练 区间k大数查询 Java 解题
- 蓝桥 算法训练 区间k大数查询(sort函数)
- 蓝桥杯--算法训练之ALGO-1 区间k大数查询
- 蓝桥杯算法训练 区间k大数查询
- 算法训练 区间k大数查询
- 算法训练 区间k大数查询
- 算法训练 区间k大数查询
- 算法训练 区间k大数查询
- 蓝桥杯 算法训练 ALGO-1 区间k大数查询
- 蓝桥杯 算法训练 区间k大数查询
- 蓝桥杯----算法训练 区间k大数查询
- 蓝桥杯_算法训练_区间k大数查询
- 算法训练 区间k大数查询
- 算法训练 区间k大数查询
- 算法训练 区间k大数查询
- 蓝桥杯 -算法训练 区间k大数查询 java算法
- 蓝桥杯-算法训练-区间k大数查询