首页 文章

找到第三大数字的输出并不像预期的那样

提问于
浏览
-1

给定一个整数数组,找出数组中的第三大值 .

MyApproach

样本输入#1

除去({1,2,3,4,5,0,1,2,0,0,2})

样本输出#1

{1,2,3,4,5,1,2,2}

样本输入#2

除去({0,0,1,2})

样本输出#2

{1,2}

样本输入#3

除去({0,0,0,0})

样本输出#3

{}

MyApproach

@编辑

为了找到最大数量,我对数组进行了排序并返回了最大数量 .

以下是我的代码 .

谢谢大家的支持 .

以下是我的代码:

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];
}

2 回答

  • 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 方法应该只删除一个最大值的事件 .

  • 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
    

相关问题