zoukankan      html  css  js  c++  java
  • 算法---区间K大数查找 Java 蓝桥杯ALGO-1

     1 import java.util.Arrays;
     2 import java.util.Scanner;
     3 
     4 public class Main {
     5     public static void main(String[] args) {
     6     Scanner aScanner = new Scanner(System.in);
     7     int n= aScanner.nextInt();   //读第一个
     8     long a[] = new long[n];      //存放数组
     9     long b[] = new long[n];      //备用数组
    10     
    11     for(int i=0;i<n;i++)
    12     {
    13         a[i] = aScanner.nextInt();
    14     }
    15     int m = aScanner.nextInt();
    16     int []l = new int[1001];
    17     int []r = new int[1001];
    18     int []k = new int[1001];
    19     for(int i=0;i<m;i++)
    20     {
    21         l[i] = aScanner.nextInt();
    22         r[i] = aScanner.nextInt();
    23         k[i] = aScanner.nextInt();
    24         for(int j=l[i]-1;j<r[i];j++)
    25         {
    26             b[j-l[i]+1] = a[j];
    27         }
    28         Arrays.sort(b);
    29         System.out.println(b[b.length-k[i]]);
    30         Arrays.fill(b, '');
    31         
    32     }
    33     }
    34 }

      刚开始做的时候使用的二维数组,使用冒泡排序,但涉及到了三层循环,最后虽然结果出来了,但是运行超时。

      于是就需求更优化的方法,后来参考网上的标准答案后有一个排序函数可以用sort()函数,直接使用Arrays.sort()函数对数组进行从小到大的排序,每次得出结果后直接输出。

    同时循环一次后需要对结果进行清空,我使用的是Arrays.fill()函数,用‘’来填充,但也有不足的地方,会在清空后都是0的形式存在,数组的长度没有变化,所以需要我之后进一步改进,最后的评测结果如图:仍旧有一个运行超时!!,仅供参考

    注:网络查找标准答案代码(Java,未加头文件,自行加入):

    public class Main
    {
        private static BufferedInputStream in = new BufferedInputStream(System.in);
        public static void main(String[] args) throws IOException {
            int []nums = new int[readint()];
            
            for(int i=0;i<nums.length;i++)
            {
                nums[i] = readint();
            }
            for(int i=readint();i>0;i--)
            {
                int a = readint();
                int b = readint();
                int c = readint();
                
                int[] tn = new int[b-a+1];
                
                for(int j=0;j<tn.length;j++)
                {
                    tn[j] = nums[a-1+j];
                }
                Arrays.sort(tn);
                
                System.out.println(tn[tn.length-c]);
            }
        }
    
        private static int readint()throws IOException {
            // TODO Auto-generated method stub
            int i,sum=0;
            while(((i=in.read())&48)!=48||i>57); 
            
            for(;(i&56)==48||(i&62)==56;i=in.read())
                sum = sum*10+(i&15);
            return sum;
        }
    }
  • 相关阅读:
    git clone 解决Permission Denied (publickey)问题
    json-server 的基本使用
    存储过程的基本使用(1)
    Linux中的yum是什么?如何配置?如何使用?
    搭建博客园皮肤
    PSCP和SCP区别和用法
    Linux 磁盘分区和挂载
    win10产生文件的哈希值
    linux下刻录iso到U盘
    jquery鼠标移入移出
  • 原文地址:https://www.cnblogs.com/liuhui5599/p/8600758.html
Copyright © 2011-2022 走看看