OJ一直报我错误,用java老是超时,用C++不会,求问各位大神有没有啥好的方法(java代码修改方面)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OJ一直报我错误,用java老是超时,用C++不会,求问各位大神有没有啥好的方法(java代码修改方面)?相关的知识,希望对你有一定的参考价值。

代码如下:import java.util.Scanner;public class Main public static void main(String[] args) Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int n2 = sc.nextInt(); int []m = new int [n]; for(int i = 0;i<n;i++) m[i] = sc.nextInt(); int []m2 = new int [n2]; for(int i = 0;i<n2;i++) m2[i] = sc.nextInt(); binarySearch(m,m2[i]); sc.close(); public static void binarySearch(int a[],int goal) StringBuilder sb = new StringBuilder(); int high=a.length-1; int low=0; while (low<=high) int middle=(low+high)/2; if (a[middle]==goal) sb.append(a[middle]); sb.append("\n"); break; else if (a[middle]>goal) high=middle-1; else low=middle+1; if(low>=high) sb.append(a[low-1]); sb.append("\n"); System.out.print(sb);

Java中的Scanner运行特别慢,建议使用BufferedReader与StringTokenizer来代替Scanner,速度会提高很多,用Java刷OJ超时是很正常的,速度真的是太慢了 参考技术A import java.util.Scanner;
class Main 
    public static int get(int[] arr, int num) 
        int max_gap = Integer.MAX_VALUE;
        int min_val = Integer.MAX_VALUE;
        for (int i = 0; i < arr.length; i++) 
            int ai = arr[i];
            int gap = Math.abs(ai - num);
            if (max_gap > gap) 
                min_val = ai;
                max_gap = gap;
             else if (max_gap == gap && min_val > ai) 
                min_val = ai;
            
        
        return min_val;
    
    public static void main(String[] args) 
        Scanner sc = new Scanner(System. in );
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) 
            arr[i] = sc.nextInt();
        
        int[] result = new int[m];
        for (int i = 0; i < m; i++) 
            int y = sc.nextInt();
            result[i] = get(arr, y);
        
        sc.close();
        for (int i = 0; i < result.length; i++) 
            System.out.println(result[i]);
        
    

追问

你好,我提交上去还是报Time limited,是不是这类型题用java交不了==

参考技术B 我也是,崩溃,翻译别人c++效率很高的算法过来都超时,java是咋了?

C++ sort 排序函数用法

(给CPP开发者加星标,提升C/C++技能)

来源:CSDN - 浅然言而信
https://blog.csdn.net/w_linux/article/details/76222112

最近在刷ACM经常用到排序,以前老是写冒泡,可把冒泡带到OJ里后发现经常超时,所以本想用快排,可是很多学长推荐用sort函数,因为自己写的快排写不好真的没有sort快,所以毅然决然选择sort函数

用法

1、sort函数可以三个参数也可以两个参数,必须的头文件#include < algorithm>和using namespace std;
2、它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n)

3、Sort函数有三个参数:(第三个参数可不写)

(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。

两个参数用法

#include <iostream>
#include <algorithm>
int main()
{
 int a[20]={2,4,1,23,5,76,0,43,24,65},i;
 for(i=0;i<20;i++)
  cout<<a[i]<<endl;
 sort(a,a+20);
 for(i=0;i<20;i++)
 cout<<a[i]<<endl;
 return 0;
}

输出结果是升序排列。(两个参数的sort默认升序排序)


三个参数

// sort algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::sort
#include <vector>       // std::vector

bool myfunction (int i,int j) { return (i<j); }//升序排列
bool myfunction2 (int i,int j) { return (i>j); }//降序排列

struct myclass {
  bool operator() (int i,int j) { return (i<j);}
} myobject;

int main () {
    int myints[8] = {32,71,12,45,26,80,53,33};
  std::vector<int> myvector (myints, myints+8);               // 32 71 12 45 26 80 53 33

  // using default comparison (operator <):
  std::sort (myvector.begin(), myvector.begin()+4);           //(12 32 45 71)26 80 53 33

  // using function as comp
  std::sort (myvector.begin()+4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80)
    //std::sort (myints,myints+8,myfunction);不用vector的用法
    
  // using object as comp
  std::sort (myvector.begin(), myvector.end(), myobject);     //(12 26 32 33 45 53 71 80)

  // print out content:
  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)//输出
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

string 使用反向迭代器来完成逆序排列

#include <iostream>
using namespace std;
int main()
{
     string str("cvicses");
     string s(str.rbegin(),str.rend());
     cout << s <<endl;
     return 0;
}
//输出:sescivc



- EOF -


推荐阅读   点击标题可跳转

1、

2、

3、


关注『CPP开发者』

看精选C++技术文章 . 加C++开发者专属圈子

↓↓↓


点赞和在看就是最大的支持❤️

以上是关于OJ一直报我错误,用java老是超时,用C++不会,求问各位大神有没有啥好的方法(java代码修改方面)?的主要内容,如果未能解决你的问题,请参考以下文章

用PHP语言刷OJ题

SecuCRT连接到LINUX时用方向键老是显示乱码字符串在VIM编辑器壮态下用方向键也显示乱码串怎么搞啊

用C#连接操作MYSQL时,老是会超时,怎么处理SQL语句执超时啊,连接字符串里好像设置不了。

杭电OJ 1001

杭电OJ 1001

九度OJ平台练习 —— 题目1009