Для массива массивов для каждого внутреннего массива. Если массив имеет & lt; 2 числа, return 0 else return второе наименьшее число [дубликат]

Иногда это связано с вашим «Inherit From Target». Это значение должно быть установлено. С помощью отдельных целевых приложений вы можете просто выбрать Inherit From Target. Если у вас больше одной цели, выберите желаемую цель.

2
задан Adam Stelmaszczyk 24 May 2015 в 20:14
поделиться

14 ответов

Попробуйте это. Второе условие используется для улавливания события, когда наименьшее число является первым

    int[] elements = {-5, -4, 0, 2, 10, 3, -3};
    int smallest = Integer.MAX_VALUE;
    int secondSmallest = Integer.MAX_VALUE;
    for (int i = 0; i < elements.length; i++) {
        if(elements[i]==smallest){
          secondSmallest=smallest;
        } else if (elements[i] < smallest) {
            secondSmallest = smallest;
            smallest = elements[i];
        } else if (elements[i] < secondSmallest) {
            secondSmallest = elements[i];
        }

    }

UPD by @Axel

    int[] elements = {-5, -4, 0, 2, 10, 3, -3};
    int smallest = Integer.MAX_VALUE;
    int secondSmallest = Integer.MAX_VALUE;
    for (int i = 0; i < elements.length; i++) {
    if (elements[i] < smallest) {
            secondSmallest = smallest;
            smallest = elements[i];
        } else if (elements[i] < secondSmallest) {
            secondSmallest = elements[i];
        }

    }
7
ответ дан nesteant 21 August 2018 в 03:43
поделиться
  • 1
    Каков ожидаемый результат, когда два числа имеют наименьшее значение? Например, когда int[] elements = {-5, -4, 0, 2, 10, 3, -5}? Должно ли это быть -5 или -4? Это дает вам -4. – Axel 24 May 2015 в 20:28
  • 2
    под редакцией Кристиана. Спасибо – nesteant 24 May 2015 в 20:29
  • 3
    Не было бы достаточно использовать => вместо > во втором if? (О, извините, теперь это третий). – Axel 24 May 2015 в 20:31
  • 4
    Да, это будет правильно – nesteant 24 May 2015 в 20:32
  • 5
    Поэтому лучше просто удалить первый if и весь && elements[i] > smallest, чтобы сделать его более читаемым. – Axel 24 May 2015 в 20:34
public static int findSecondSmallest(int[] elements) {
    if (elements == null || elements.length < 2) {
        throw new IllegalArgumentException();
    } 
    int smallest = elements[0]; 
    int secondSmallest = elements[0]; 
    for (int i = 1; i < elements.length; i++) {
        if (elements[i] < smallest) {
            secondSmallest = smallest;
            smallest = elements[i];
        } 
        else if (elements[i] < secondSmallest) {
            secondSmallest = elements[i];
        }
    }
    return secondSmallest;
}
1
ответ дан Adam Stelmaszczyk 21 August 2018 в 03:43
поделиться
  • 1
    Этот код не будет работать, если есть элемент >= smallest, однако < secondSmallest. В этом случае необходимо заменить secondSmallest. – Timo 24 May 2015 в 20:21
  • 2
    Также, если первое значение в элементах является наименьшим, оно не будет устанавливать secondSmallest – Christian Sarofeen 24 May 2015 в 20:22
    try this ...
first condition checks if both values are less than value in array.
second condition if value is less than small than smallest=element[i]
else secondSmallest=elements[i]..

        public static void main(String[] args) 
        {
            int[] elements  = {0 , 2 , 10 , 3, -3 }; 
            int smallest = elements[0];
            int secondSmallest = 0; 

              for (int i = 0; i < elements.Length; i++)
                {
                    if (elements[i]<smallest || elements[i]<secondSmallest )
                    {
                        if (elements[i] < smallest )
                        {
                            secondSmallest  = smallest ;
                            smallest = elements[i];

                        }
                        else
                        {
                            secondSmallest = elements[i];

                        }
                    }
                }

            System.out.println("The smallest element is: " + smallest + "\n"+  "The second smallest element is: " + secondSmallest);
        }
0
ответ дан akmal saeed 21 August 2018 в 03:43
поделиться
     public static void main(String[] args) 
{
    int[] elements  = {-4 , 2 , 10 , -2, -3 }; 
    int smallest = Integer.MAX_VALUE; 
    int secondSmallest = Integer.MAX_VALUE; 

    for (int i = 0; i < elements.length; i++)
    {
        if (smallest>elements[i])
            smallest=elements[i];

    }

    for (int i = 0; i < elements.length; i++)
    {
        if (secondSmallest>elements[i] && elements[i]>smallest)
            secondSmallest=elements[i];

    }

    System.out.println("The smallest element is: " + smallest + "\n"+  "The second smallest element is: " + secondSmallest);
}
0
ответ дан Amit.rk3 21 August 2018 в 03:43
поделиться
  • 1
    это будет работать и на массивах с дубликатами, например, int [] elements = {-4, -4, -4, -4, -3}; – Amit.rk3 24 May 2015 в 20:40

Просто вы можете это сделать

int[] arr = new int[]{34, 45, 21, 12, 54, 67, 15};
Arrays.sort(arr);
System.out.println(arr[1]);
2
ответ дан Ankit 21 August 2018 в 03:43
поделиться
  • 1
    Это кратчайшее и лучшее решение, на мой взгляд, но оно не рекурсивно, как описано автором вопроса;) – Kamil 19 July 2018 в 13:54
0
ответ дан Dominique 21 August 2018 в 03:43
поделиться
    int[] arr = { 4, 1, 2, 0, 6, 1, 2, 0 };

    int smallest = Integer.MAX_VALUE;
    int smaller = Integer.MAX_VALUE;
    int i = 0;

    if (arr.length > 2) {
        for (i = 0; i < arr.length; i++) {

            if (arr[i] < smallest) {
                smaller = smallest;
                smallest = arr[i];
            } else if (arr[i] < smaller && arr[i] > smallest) {
                smaller = arr[i];
            }
        }

        System.out.println("Smallest number is " + smallest);
        System.out.println("Smaller number is " + smaller);

    } else {
        System.out.println("Invalid array !");
    }
}
2
ответ дан Feeroz Alam 21 August 2018 в 03:43
поделиться
  • 1
    что, если массив имеет только одно значение? int [] arr = {0}, то он терпит неудачу, возвращает Max_VALUE – developer 26 May 2017 в 08:23
public static void main(String[] args) {

    Scanner in = new Scanner(System.in);
    System.out.println("Enter array size = ");
    int size=in.nextInt();
    int[] n = new int[size];
    System.out.println("Enter "+ size +" values ");

    for(int i=0;i<n.length;i++)
        n[i] = in.nextInt();
    int small=n[0],ssmall=n[0];

    // finding small and second small
    for(int i=0;i<n.length;i++){
        if(small>n[i]){
            ssmall=small;
            small=n[i];
            }else if(ssmall>n[i])
                ssmall=n[i];
    }

    // finding second small if first element itself small
    if(small==n[0]){
        ssmall=n[1];
        for(int i=1;i<n.length;i++){
            if(ssmall>n[i]){
                ssmall=n[i];
                }
        }
    }

    System.out.println("Small "+ small+" sSmall "+ ssmall);

    in.close();
}
0
ответ дан girish 21 August 2018 в 03:43
поделиться

Вы можете сделать это в O (n) времени. Ниже приведен код python

def second_small(A):
    if len(A)<2:
        print 'Invalid Array...'
        return
    small = A[0]
    second_small = [1]
    if small >  A[1]:
        second_small,small = A[0],A[1]

    for i in range(2,len(A)):
        if A[i] < second_small and A[i]!=small:
            if A[i] < small:
                second_small = small
                small = A[i]
            else:
                second_small = A[i]
    print small, second_small
A = [12, 13, 1, 10, 34, 1]
second_small(A)
0
ответ дан Jay Parikh 21 August 2018 в 03:43
поделиться

Я использовал функцию Sort в javascript

function sumTwoSmallestNumbers(numbers){  
  numbers = numbers.sort(function(a, b){return a - b; });
  return numbers[0] + numbers[1];
};

, предоставив compareFunction для функции сортировки. Элементы массива сортируются в соответствии с возвращаемым значением функции .

1
ответ дан Jayampathy Wijesena 21 August 2018 в 03:43
поделиться

public class SecondSmallestNumberInArray 
        {
            public static void main(String[] args) 
            {
                int arr[] = { 99, 76, 47, 85, 929, 52, 48, 36, 66, 81, 9 };
                int smallest = arr[0];
                int secondSmallest = arr[0];

                System.out.println("The given array is:");
                boolean find = false;
                boolean flag = true;

                for (int i = 0; i < arr.length; i++) 
                {
                    System.out.print(arr[i] + "  ");
                }

                System.out.println("");

                while (flag) 
                {
                    for (int i = 0; i < arr.length; i++) 
                    {
                        if (arr[i] < smallest) 
                        {   
                            find = true;
                            secondSmallest = smallest;
                            smallest = arr[i];
                        } else if (arr[i] < secondSmallest) {   
                            find = true;
                            secondSmallest = arr[i];
                        }
                    }
                    if (find) {
                        System.out.println("\nSecond Smallest number is Array : ->  " + secondSmallest);
                        flag = false;
                    } else {
                        smallest = arr[1];
                        secondSmallest = arr[1];
                    }
                }
            }
        }

    **Output is**

    D:\Java>java SecondSmallestNumberInArray

    The given array is:

    99  76  47  85  929  52  48  36  66  81  9

    Second Smallest number is Array : ->  36

    D:\Java>
0
ответ дан Keshav Gera 21 August 2018 в 03:43
поделиться
public static int getSecondSmallest(int[] arr){
        int smallest = Integer.MAX_VALUE;
        int secondSmallest = Integer.MAX_VALUE;
        for(int i=0;i<arr.length;i++){
            if(smallest > arr[i]){
                secondSmallest = smallest;
                smallest = arr[i];
            }else if (secondSmallest > arr[i] && arr[i] != smallest){
            secondSmallest = arr[i];
        }
            System.out.println(i+" "+smallest+" "+secondSmallest);
        }
        return secondSmallest;
    }

Просто попробовал некоторые из тестовых примеров, и это сработало. Проверьте, правильно ли это!

0
ответ дан Nilesh 21 August 2018 в 03:43
поделиться

Попробуйте это.

    public static void main(String args[]){
        int[] array = new int[]{10, 30, 15, 8, 20, 4};

        int min, secondMin;

        if (array[0] > array[1]){
            min = array[1];
            secondMin = array[0];
        }
        else{
            min = array[0];
            secondMin = array[1];
        }

        for (int i=2; i<array.length; i++){
            if (array[i] < min){
                secondMin = min;
                min = array[i];
            }
            else if ((array[i] > min) && (array[i] < secondMin)){
                secondMin = array[i];
            }
        }
       System.out.println(secondMin);
  }
0
ответ дан Prabhashani 21 August 2018 в 03:43
поделиться
public static void main(String[] args)  {
    int arr[] = {6,1,37,-4,12,46,5,64,21,2,-4,-3};
    int lowest =arr[0];
    int sec_lowest =arr[0];
    for(int n : arr){
        if (lowest >  n)
        {
            sec_lowest = lowest;
            lowest = n;

        }
        else if (sec_lowest > n && lowest != n)
            sec_lowest = n;
    }

    System.out.println(lowest+"   "+sec_lowest);

    }
0
ответ дан Rounak 21 August 2018 в 03:43
поделиться
  • 1
    Из очереди просмотра: Могу ли я попросить вас добавить еще какой-нибудь контекст вокруг вашего ответа. Кодовые ответы трудно понять. Это поможет читателю и будущим читателям, если вы сможете добавить дополнительную информацию в свой пост. – help-info.de 28 May 2017 в 09:56
Другие вопросы по тегам:

Похожие вопросы: