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代码修改方面)?的主要内容,如果未能解决你的问题,请参考以下文章
SecuCRT连接到LINUX时用方向键老是显示乱码字符串在VIM编辑器壮态下用方向键也显示乱码串怎么搞啊