一个数组,里面全是数字,从左至右的特征是从小到大,然后从大到小,数组中可能会出现连续重复的数字,请写一段代码《最快》找出数组中最大的数值,(最大值可能为1到多个),输出最大数字和个数 比如数组[1,3,3,3,4,5,6,7,8,8,8,8,8,9,10,10,11,11,12,23,23,33,33,10,2,2,2,2,2,2,1,1,1]
public class Test {
// private static int[] nums = new int[]{1,3,3,3,4,5,6,7,8,8,8,8,8,9,10,10,11,11,12,23,23,33,33,10,2,2,2,2,2,2,1,1,1};
private static int[] nums = {9, 9, 9, 9, 9, 6, 6, 6, 2, 2, 2, 1};
public static void main(String[] args) {
sort(nums, 0, nums.length - 1);
}
public static void sort(int[] nums, int l, int r) {
int m = (l + r) / 2;
int i = 0;
String s = find(nums, m);
String[] s1 = s.split(" ");
int ll = Integer.parseInt(s1[0]);
int rr = Integer.parseInt(s1[1]);
if(rr == nums.length -1 && ll == 0){
System.out.println("最大值:" + rr + " " + ll);
System.out.println("最大值:" + nums[rr] + " " + nums[ll]);
System.out.println("总数" + ((rr - ll) + 1) * nums[rr]);
}else if(rr == nums.length -1){
System.out.println("最大值:" + rr + " " + ll);
System.out.println("最大值:" + nums[rr] + " " + nums[ll]);
System.out.println("总数" + ((rr - ll) + 1) * nums[rr]);
}else if(ll == 0){
System.out.println("最大值:" + rr + " " + ll);
System.out.println("最大值:" + nums[rr] + " " + nums[ll]);
System.out.println("总数" + ((rr - ll) + 1) * nums[rr]);
}
else{
if (nums[rr + 1] < nums[rr] && nums[ll - 1] < nums[ll]) {
System.out.println("最大值:" + rr + " " + ll);
System.out.println("最大值:" + nums[rr] + " " + nums[ll]);
System.out.println("总数" + ((rr - ll) + 1) * nums[rr]);
}
if (nums[rr + 1] > nums[rr] && nums[ll - 1] < nums[ll]) {
sort(nums, rr, r);
}
if (nums[rr + 1] < nums[rr] && nums[ll - 1] > nums[ll]) {
sort(nums, l, ll);
}
}
}
public static String find(int[] nums, int m) {
int rr = m;
int ll = m;
boolean lflag = false;
boolean rflag = false;
while (true) {
if (lflag && rflag) {
break;
}
if (nums[rr] == nums[rr + 1]) {
rr = rr + 1;
if(rr >= nums.length-1){
rflag = true;
}else{
if (nums[rr] != nums[rr + 1]) {
rflag = true;
}
}
} else {
rflag = true;
}
if (nums[ll] == nums[ll - 1]) {
ll = ll - 1;
if(ll <= 0){
lflag = true;
}else{
if (nums[ll] != nums[ll - 1]) {
lflag = true;
}
}
} else {
lflag = true;
}
}
System.out.println(nums[m] + " " + rr + " " + ll);
return ll + " " + rr;
}
}