Ikki eng katta elementni qatordan chiqaring

Men qatorni to'ldira olaman va eng katta ikki raqamni topdim. Ammo, uni o'chira olmayman. Mayli bolalar menga yordam berishi mumkinmi?

  int n = sc.nextInt();
  int [] myArray = new int[n];
  int first = 0;
  int second = 0;
       for(int i = 0; i < myArray.length; i++) {
    int num = sc.nextInt();`
       if (num > first) {
         second = first;
         first = num;
    } else if(num > second) 
      {
      second = num;
      }
     }

   System.out.println("The largest  " + first+ "The second largest  " + second);
0
Bu sizning vazifangiz bo'lsa, qatoringizdan hech narsa yo'q qilish shart emas. To'pni olish uchun qatordan looplash 2 eng yuqori qiymatlarni kuzatib boradi. Nihoyat sizning summaning ikkita eng yuqori qiymatini yig'ib oling va so'ngra uzunlik bo'yicha bo'linib-2-ni ajratib oling.
qo'shib qo'ydi muallif Philipp, manba
Nima uchun uni o'chira olmaysiz?
qo'shib qo'ydi muallif Jens, manba
Tasavvur qiladiki, sizning qatoringiz ikki element bilan qisqarishini kutasizmi? Bu massivlar bilan mumkin emas. Ushbu elementlarni bo'shga o'rnatishingiz mumkin. Ushbu elementlarni o'chirishni istasangiz, List boshqa ma'lumotlar strukturasini kiriting
qo'shib qo'ydi muallif Ansgar Schulte, manba
Mana mening vazifam: Konsolga tamsayılar ro'yxatining o'rtacha o'rtacha qiymatini yozing, lekin ikkita eng katta qiymatlarni e'tiborsiz qoldiring.
qo'shib qo'ydi muallif P.Tom, manba

8 javoblar

Siz faqat qatorni tartiblashingiz va ikkita eng katta elementlarni topishingiz yoki olib tashlashingiz mumkin.

int [] myArray = new int[]{14,5,2,16,18,20};
System.out.println("The original array is "+ " " +Arrays.toString(myArray));
Arrays.sort(myArray);
System.out.println("The sorted array is "+ " " +Arrays.toString(myArray));;

int fisrtmax = myArray[myArray.length-1];
int secondmax = myArray[myArray.length-2];

System.out.println("The first biggest number is " + fisrtmax+ "  The second biggest number is " + secondmax);

int [] arrafterremove= Arrays.copyOf(myArray, myArray.length-2);


System.out.println("The array after removing the two biggest numbers is " + Arrays.toString(arrafterremove));

RUN

The original array is  [14, 5, 2, 16, 18, 20]
The sorted array is  [2, 5, 14, 16, 18, 20]
The first biggest number is 20  The second biggest number is 18
Array after removing the two biggest numbers is [2, 5, 14, 16]
1
qo'shib qo'ydi
@ YCF_L, mening yechimim asl nashrga asoslangan edi. Har qanday istisno, keyin savolni yangilash kerak.
qo'shib qo'ydi muallif FSm, manba
mmmm, o'q ......
qo'shib qo'ydi muallif YCF_L, manba
agar qator bitta qiymatga ega bo'lsa yoki u bo'sh bo'lsa int [] myArray = new int [] {14}; sizga java.lang.ArrayIndexOutOfBoundsException bu nuqtadan qochib qutulmasligim kerak
qo'shib qo'ydi muallif YCF_L, manba

Agar siz Java 8 dan foydalanayotgan bo'lsangiz, siz qatorni tartiblashingiz mumkin, keyin siz qatorni otishingiz mumkin va o'z qadriyatlarini boshqa ikkita qilib qo'yish mumkin, masalan, oxirgi ikki Integerdan saqlanish:

//Your array
Integer[] array = {8, 99, 6, 336, 2};

//sort your array this can give your [2, 6, 8, 99, 336]
Arrays.sort(array);

//create a new array with the length = array - 2 if the length of array < 2 then 0
Integer[] array2 = new Integer[array.length > 2 ? array.length - 2 : 0];

//copy your array into the array2 avoiding the 2 last
System.arraycopy(array, 0, array2, 0, array.length > 2 ? array.length - 2 : 0);

//print your array, this will print [2, 6, 8]
System.out.println(Arrays.toString(array2));
1
qo'shib qo'ydi
OK, yaxshi. Biroq, oqim hali ham yangi boshlanuvchilar uchun ilg'or yondashuv. Hurmat bilan
qo'shib qo'ydi muallif FSm, manba
Ha, bu to'g'ri, uni Arrays.sort (array); @Andro
qo'shib qo'ydi muallif YCF_L, manba

Agar siz Java 8 dan foydalanayotgan bo'lsangiz, siz qatorni tartiblashingiz mumkin, keyin siz qatorni otishingiz mumkin va o'z qadriyatlarini boshqa ikkita qilib qo'yish mumkin, masalan, oxirgi ikki Integerdan saqlanish:

//Your array
Integer[] array = {8, 99, 6, 336, 2};

//sort your array this can give your [2, 6, 8, 99, 336]
Arrays.sort(array);

//create a new array with the length = array - 2 if the length of array < 2 then 0
Integer[] array2 = new Integer[array.length > 2 ? array.length - 2 : 0];

//copy your array into the array2 avoiding the 2 last
System.arraycopy(array, 0, array2, 0, array.length > 2 ? array.length - 2 : 0);

//print your array, this will print [2, 6, 8]
System.out.println(Arrays.toString(array2));
1
qo'shib qo'ydi
OK, yaxshi. Biroq, oqim hali ham yangi boshlanuvchilar uchun ilg'or yondashuv. Hurmat bilan
qo'shib qo'ydi muallif FSm, manba
Ha, bu to'g'ri, uni Arrays.sort (array); @Andro
qo'shib qo'ydi muallif YCF_L, manba

Seriallarni tartiblash (asl qiymati kichik, eng kichikdan boshlab), so'ngra oxirgi ikki elementsiz qatorni yangi nusxasini yarating.

if(myArray.length > 2) {
    Arrays.sort(myArray);
    myArray = Arrays.copyOf(myArray, myArray.length-2);
} else {
    throw new IllegalArgumentException("Need moar elements in array!");
}

Keyinchalik olingan qatorda hisob-kitoblarni bajaring. Asl qatorni saqlamoqchi bo'lsangiz, copyOf() ishini bajarayotganda myArray yozuvini yozmang.

1
qo'shib qo'ydi
mmmm, o'q ......
qo'shib qo'ydi muallif YCF_L, manba
bu to'g'ri, ammo sizning katalogingiz bo'sh yoki 1 qiymati bo'lsa java.lang.NegativeArraySizeException ni olishingiz mumkin.
qo'shib qo'ydi muallif YCF_L, manba
Xatolarni ko'rib chiqish o'quvchi uchun mashq qilib qoldirildi. Men eng mashaqqatli dasturiy arxeologlarni ham chalkashtirib yuboradigan yarim sahifali teshiklar o'rniga, buning uchun eng qisqa, eng oqlangan uslubini ko'rsatdim.
qo'shib qo'ydi muallif Kayaman, manba
Yaxshi, men seni hurmat qilaman.
qo'shib qo'ydi muallif Kayaman, manba

Seriallarni tartiblash (asl qiymati kichik, eng kichikdan boshlab), so'ngra oxirgi ikki elementsiz qatorni yangi nusxasini yarating.

if(myArray.length > 2) {
    Arrays.sort(myArray);
    myArray = Arrays.copyOf(myArray, myArray.length-2);
} else {
    throw new IllegalArgumentException("Need moar elements in array!");
}

Keyinchalik olingan qatorda hisob-kitoblarni bajaring. Asl qatorni saqlamoqchi bo'lsangiz, copyOf() ishini bajarayotganda myArray yozuvini yozmang.

1
qo'shib qo'ydi
bu to'g'ri, ammo sizning katalogingiz bo'sh yoki 1 qiymati bo'lsa java.lang.NegativeArraySizeException ni olishingiz mumkin.
qo'shib qo'ydi muallif YCF_L, manba
mmmm, o'q ......
qo'shib qo'ydi muallif YCF_L, manba
Xatolarni ko'rib chiqish o'quvchi uchun mashq qilib qoldirildi. Men eng mashaqqatli dasturiy arxeologlarni ham chalkashtirib yuboradigan yarim sahifali teshiklar o'rniga, buning uchun eng qisqa, eng oqlangan uslubini ko'rsatdim.
qo'shib qo'ydi muallif Kayaman, manba
Yaxshi, men seni hurmat qilaman.
qo'shib qo'ydi muallif Kayaman, manba

myArray ichidagi barcha elementlarni saqlagan yangi qator (bu holda, filteredArray ) yaratishingiz mumkin, lekin ikkitadan. Bundan tashqari, ularni engilroq qilish imkoniyatiga ega bo'lish uchun ularning qiymatlaridan ko'ra, ikki eng katta sonning ko'rsatkichlarini saqlab qolish yaxshiroqdir.

Bu ishlashi kerak (siz kerakli qatorni filteredArray ) topasiz.

int n = sc.nextInt();
int [] myArray = new int[n];
int first = 0;
int second = 0;
for(int i = 0; i < myArray.length; i++) {
    myArray[i] = sc.nextInt();
    if (myArray[i] > myArray[first]) {
        second = first;
        first = i;
    } else if(myArray[i] > myArray[second]) {
        second = i;
    }
}
int [] filteredArray = new int[n-2];
int skipped = 0;
for(int i = 0; i < myArray.length; i++) {
    if(i != first && i != second)
        filteredArray[i - skipped] = myArray[i];
    else
        skipped++;
}
1
qo'shib qo'ydi

Quyidagi kod siz uchun foydali bo'ladi

again :
for (int i = 0; i < n; i++) 
{            
     if ((a[i] < a[i+1]) && (i+1)

Agar siz boshqalarni yo'q qilishni xohlasangiz, buni amalga oshirishingiz mumkin

for(int i=2; i
0
qo'shib qo'ydi

Quyidagi kod siz uchun foydali bo'ladi

again :
for (int i = 0; i < n; i++) 
{            
     if ((a[i] < a[i+1]) && (i+1)

Agar siz boshqalarni yo'q qilishni xohlasangiz, buni amalga oshirishingiz mumkin

for(int i=2; i
0
qo'shib qo'ydi