Element elementining so'nggi takrorlanish indeksini topish

Qanday qilib C #-qatordagi elementning so'nggi takroriyligini qaytarib olishni olasiz?

For example you have: int[] array = { 3, 5, 7, 8, 3, 4, 3 , 9 };

Va siz qidiryapsiz element 3 oxirgi takrorlanish ko'rsatkichi 6 ga teng.

Bu birinchi takroriylikni topish uchun bor narsam:

public static int Search(int[] array, int value)
{
    for (int i = 0; i < array.Length; i++)
    {
        if (value == array[i])
        {
            return i;
        }
    }
    return -1;
}

PS: Men hech qanday funktsiyalar yoki usullardan foydalana olmayman. Faqatgina massivlardan foydalanishga ruxsat berildi.

0
Elementning birinchi marta takrorlanish indeksini topishni bilaman, ammo oxirgi ma'lumotni qanday topishni bilmayman.
qo'shib qo'ydi muallif Slasher, manba
Funktsiya yo'qmi? Sizning loopingizda hisoblashingiz kerak emas, siz ham hisoblashingiz mumkin.
qo'shib qo'ydi muallif Tony Hopkinson, manba
Funktsiya yo'qmi? Sizning loopingizda hisoblashingiz kerak emas, siz ham hisoblashingiz mumkin.
qo'shib qo'ydi muallif Tony Hopkinson, manba
Yuqorida keltirilgan j = i nima?
qo'shib qo'ydi muallif Tony Hopkinson, manba
Yuqorida keltirilgan j = i nima?
qo'shib qo'ydi muallif Tony Hopkinson, manba
Agar dastlabki echim topsangiz, u holda siz oxirgi qatorga egasiz, agar siz qatorni farq qiladigan bo'lsa ...
qo'shib qo'ydi muallif Tony Hopkinson, manba
Agar dastlabki echim topsangiz, u holda siz oxirgi qatorga egasiz, agar siz qatorni farq qiladigan bo'lsa ...
qo'shib qo'ydi muallif Tony Hopkinson, manba
Hozirgacha nimani sinab ko'rdingiz? Siz homiylarni hal qilish uchun SO dan kutmang ...
qo'shib qo'ydi muallif Darjan Bogdan, manba

8 javoblar

Orqadan qidirishga harakat qiling. Agar siz qatorning birinchi elementidan qidirsangiz, siz qatorni oxirigacha izlashga to'g'ri keladi. Agar siz orqadan qidirish qilsangiz, uni topgandan so'ng uni to'g'ridan to'g'ri qaytarishingiz mumkin.

public static int search(int lem, int[] a)
{
    for (int i = a.Length - 1; i >= 0; i--) 
    {
        if (lem == a[i])
        {
            return i;
        }
    }
     return -1; 
}
4
qo'shib qo'ydi
Bu ishlashi kerak.
qo'shib qo'ydi muallif Slasher, manba

Orqadan qidirishga harakat qiling. Agar siz qatorning birinchi elementidan qidirsangiz, siz qatorni oxirigacha izlashga to'g'ri keladi. Agar siz orqadan qidirish qilsangiz, uni topgandan so'ng uni to'g'ridan to'g'ri qaytarishingiz mumkin.

public static int search(int lem, int[] a)
{
    for (int i = a.Length - 1; i >= 0; i--) 
    {
        if (lem == a[i])
        {
            return i;
        }
    }
     return -1; 
}
4
qo'shib qo'ydi
Bu ishlashi kerak.
qo'shib qo'ydi muallif Slasher, manba

Your question is vague one. If you're looking for any duplicate (not necessary 3) I suggest using HashSet (C# implementation):

int[] array = { 3, 5, 7, 8, 3, 4, 3, 9 };

HashSet used = new HashSet();

int last = -1;

for (int i = 0; i < array.Length; ++i)
  if (!used.Add(array[i]))//failed to add to the set, array[i] is a duplicate
    last = i;

Console.Write(last); 

Siz faqat so'nggi 3 holatini izlayotgan bo'lsangiz, orqaga pastadirini harakat qilib ko'ring:

   int last = -1;

   for (int i = array.Length - 1; i >= 0; --i)
     if (array[i] == 3) {
       last = i;

       break;
     } 
1
qo'shib qo'ydi
LINQ va boshqa funktsiyalarni ishlata olmayapman.
qo'shib qo'ydi muallif Slasher, manba
Bu faqat biron bir vazifani bajarish mumkinmi, chunki men faqatgina massivlardan foydalanishim mumkin.
qo'shib qo'ydi muallif Slasher, manba

Your question is vague one. If you're looking for any duplicate (not necessary 3) I suggest using HashSet (C# implementation):

int[] array = { 3, 5, 7, 8, 3, 4, 3, 9 };

HashSet used = new HashSet();

int last = -1;

for (int i = 0; i < array.Length; ++i)
  if (!used.Add(array[i]))//failed to add to the set, array[i] is a duplicate
    last = i;

Console.Write(last); 

Siz faqat so'nggi 3 holatini izlayotgan bo'lsangiz, orqaga pastadirini harakat qilib ko'ring:

   int last = -1;

   for (int i = array.Length - 1; i >= 0; --i)
     if (array[i] == 3) {
       last = i;

       break;
     } 
1
qo'shib qo'ydi
Bu faqat biron bir vazifani bajarish mumkinmi, chunki men faqatgina massivlardan foydalanishim mumkin.
qo'shib qo'ydi muallif Slasher, manba
LINQ va boshqa funktsiyalarni ishlata olmayapman.
qo'shib qo'ydi muallif Slasher, manba

Ushbu umumiy usulni sinab ko'ring:

public static int FindLast(T[] array, T value)
    where T : IEquatable
{
    for (int i = array.Length - 1; i >= 0; i--)
    {
        if (array[i].Equals(value))
        {
            return i;
        }
    }

    return -1;
}
0
qo'shib qo'ydi

Ushbu umumiy usulni sinab ko'ring:

public static int FindLast(T[] array, T value)
    where T : IEquatable
{
    for (int i = array.Length - 1; i >= 0; i--)
    {
        if (array[i].Equals(value))
        {
            return i;
        }
    }

    return -1;
}
0
qo'shib qo'ydi

Agar birinchi takrorni qanday topishni bilsangiz, nima uchun array.Reverse() kodini ishlatmasangiz, ma'lum algoritmdan foydalaning va topilgan qiymati array.Length formasidan toping.

Biroq, bitta usul chaqiruvini xohlasangiz, siz o'zingizning qaroringizni o'zgartirib, qiymatni bir qatordan pastga tugamaguncha qaytarib ololmaysiz:

public static int search(int lem, int[] a)
{
    int j = -1;
    for (int i = 0; i < a.Length; i++) 
    {
        if (lem == a[i])
        {
            j = i;
        }
    }
    return j; 
}
0
qo'shib qo'ydi
Men hech qanday vazifani ishlata olmayman.
qo'shib qo'ydi muallif Slasher, manba
@Slasher vazifalarni ishlatmaslik uchun echimni o'zgartirdim
qo'shib qo'ydi muallif Dmitry Pavlushin, manba

Agar birinchi takrorni qanday topishni bilsangiz, nima uchun array.Reverse() kodini ishlatmasangiz, ma'lum algoritmdan foydalaning va topilgan qiymati array.Length formasidan toping.

Biroq, bitta usul chaqiruvini xohlasangiz, siz o'zingizning qaroringizni o'zgartirib, qiymatni bir qatordan pastga tugamaguncha qaytarib ololmaysiz:

public static int search(int lem, int[] a)
{
    int j = -1;
    for (int i = 0; i < a.Length; i++) 
    {
        if (lem == a[i])
        {
            j = i;
        }
    }
    return j; 
}
0
qo'shib qo'ydi
Men hech qanday vazifani ishlata olmayman.
qo'shib qo'ydi muallif Slasher, manba
@Slasher vazifalarni ishlatmaslik uchun echimni o'zgartirdim
qo'shib qo'ydi muallif Dmitry Pavlushin, manba