import java.util.Scanner; import java.util.Arrays; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int[] nums=new int[n+1]; for(int i=0;i<n;i++){ nums[i]=sc.nextInt(); } int ans=0; Arrays.sort(nums); int temp=nums[0];//将数组第一个数保存下来 for(int i=0;i<n;i++){ nums[i]=nums[i+1]; } nums[n]=temp;//将第一个数的值赋值给最后一个数 // System.out.println(Arrays.toString(nums)); for(int i=1;i<=n;i++){ ans++; if(nums[i-1]!=nums[i]){ System.out.println(nums[i-1]+" "+ans); ans=0; } } } }优化一下这段代码,运行时间过长了
时间: 2023-04-02 20:05:10 浏览: 120
可以考虑使用快速排序算法来代替Arrays.sort()方法,因为快速排序算法的时间复杂度更低。另外,可以将循环中的i++改为i+=2,这样可以减少循环次数。最终代码如下:
import java.util.Scanner;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] nums=new int[n+1];
for(int i=1;i<=n;i++){
nums[i]=sc.nextInt();
}
int ans=;
quickSort(nums, 1, n);
int temp=nums[1];
for(int i=2;i<=n;i+=2){
nums[i-1]=nums[i];
nums[i]=temp;
if(nums[i-1]!=nums[i]){
System.out.println(nums[i-1]+" "+ans);
ans=;
}
ans++;
temp=nums[i+1];
}
}
public static void quickSort(int[] nums, int left, int right){
if(left>=right){
return;
}
int i=left, j=right, pivot=nums[left];
while(i<j){
while(i<j && nums[j]>=pivot){
j--;
}
nums[i]=nums[j];
while(i<j && nums[i]<=pivot){
i++;
}
nums[j]=nums[i];
}
nums[i]=pivot;
quickSort(nums, left, i-1);
quickSort(nums, i+1, right);
}
}
阅读全文