给定一个整数数组,找出数组中第三大的值。
MyApproach
删除({1,2,3,4,5,0,1,2,0,0,2})
样本输出#1
{1,2,3,4,5,1,2,2}
删除({0,0,1,2})
样本输出#2
{1,2}
删除({0,0,0,0})
样本输出#3
{}
MyApproach
@Edit
为了找到最大数量,我对数组进行了排序并返回了最大数量。
以下是我的代码。
感谢大家的支持。
以下是我的代码:
public int thirdLargest(int[] arr)
{
for(int i=0;i<arr.length;i++)
{
int temp=0;
int large=0;
int index=0;
large=arr[i];
for(int j=i;j<arr.length;j++)
{
if(arr[j]>=large)
{
large=arr[j];
index=j;
}
}
temp=arr[i];
arr[i]=arr[index];
arr[index]=temp;
}
return arr[2];
}
答案 0 :(得分:1)
你可以这样做:
public static int thirdLargest(int[] array) {
int largest = Integer.MIN_VALUE;
int secondLargest = Integer.MIN_VALUE;
int thirdLargest = Integer.MIN_VALUE;
for (int number : array) {
if (largest < number) {
thirdLargest = secondLargest;
secondLargest = largest;
largest = number;
} else if (secondLargest < number) {
thirdLargest = secondLargest;
secondLargest = number;
} else if (thirdLargest < number) {
thirdLargest = number;
}
}
return thirdLargest;
}
使用'{-1,-1,-1,-1,-1}'输入进行测试,并返回-1。
现在在调整代码之后:
public static int thirdLargest(int[] arr) {
int max1 = findMax(arr);
int p[] = remove(arr, max1);
int max2 = findMax(p);
int q[] = remove(p, max2);
int max3 = findMax(q);
return max3;
}
static int findMax(int[] arr) {
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] >= max) {
max = arr[i];
}
}
return max;
}
static int[] remove(int[] arr, int max) {
int index = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == max) {
index = i;
break;
}
}
int p[] = new int[arr.length - 1];
for (int m = 0, n = 0; m < arr.length; m++) {
if (index != m) {
p[n] = arr[m];
n++;
}
}
return p;
}
原因:remove
方法只应删除一个最大值的事件。
答案 1 :(得分:0)
您不应该从给定的阵列中删除数据。您要求输出第三大值,因此您应该只输出而不是修改输入中的数组。此数组可能需要稍后使用,并且可以假设由于您只找到第三大数组,因此输入数组将保持不变。
我会通过保持3个整数的数组来做到这一点。整数对应最大的3个数字,arr[0]
是最大的,arr[1]
是第二大,arr[2]
是第三大。然后,遍历输入中的每个数字,如果它大于3个数字中的任何一个,则将其他2个数字向下推,然后插入新数字。
public static int find3rdLargest(int [] arr){
int [] largest3Numbers = {Integer.MIN_VALUE,Integer.MIN_VALUE,Integer.MIN_VALUE}; // Initialize array with minimum int values possible, since we are finding largest
for(int i : arr){ // Loop over each item in input
if(i > largest3Numbers[0]){ // if its the largest number
largest3Numbers[2] = largest3Numbers[1]; // set 2nd largest to 3rd
largest3Numbers[1] = largest3Numbers[0]; // set largest to 2nd
largest3Numbers[0] = i; // set new largest
}else if (i > largest3Numbers[1]){ // if it is the second largest number
largest3Numbers[2] = largest3Numbers[1]; // set 2nd largest to 3rd
largest3Numbers[1] = i; // set new 2nd largest
}else if (i > largest3Numbers[2]){ // if it is the 3rd largest
largest3Numbers[2] = i; // set it to 3rd largest
}
}
return largest3Numbers[2]; // return 3rd largest
}
我通过运行以下来测试了这个功能:
public static void main(String[] args) throws Exception {
int[] shouldOutput4 = { 1,2,3,4,5,6 };
int[] shouldOutput0 = { 0,0,0,0,0,0 };
System.out.println("Should output 4: " + find3rdLargest(shouldOutput4));
System.out.println("Should output 0: " + find3rdLargest(shouldOutput0));
}
这给了我输出:
Should output 4: 4
Should output 0: 0