Şimdi Ara

C#'da array içinde array aramak

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
3
Cevap
0
Favori
145
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Bir array içinde alt array arayıp onun indexini döndürmeli. Yoksa 0 döndürmeli ama birden fazla varsa son bulduğunun indexini döndürmeli.
    Örnek;

    [4,9,3,7,8] ve [3,7]--- 2 döndürmeli.
    [1,3,5] ve [1] --- 0 döndürmeli.
    [7,8,9] ve [8,9,10]---- -1 döndürmeli.
    [4,9,3,7,8,3,7,1] ve [3,7] ---- 5 döndürmeli.

    Şöyle bir kod var. İlk üç koşulu sağlıyor ama son koşulda olmuyor. Yani son bulduğunu değil ilk bulduğunu döndürüyor. Sondan aramayı başlatmayı denedim ama if (find == true)'da sonsuz döngüye giriyor.

    int[] array = new int[] { 4, 9, 3, 7, 8, 3, 7, 1 };
    int[] subArray = new int[] { 3, 7 };

    int y = 0;
    int index = 0;
    bool find = false;

    for (int x = array.Length-1; x >0 && y < subArray.Length;)
    {
    if (array[x] != subArray[y])
    {
    if (find == true)
    {
    y = 0;
    index = x;
    }
    else
    {
    x++;
    y = 0;
    index = x;
    }
    }
    else
    {
    find = true;
    x++;
    y++;
    }
    }
    if (y == subArray.Length)
    Console.WriteLine(index);
    else
    Console.WriteLine(-1);



    < Bu mesaj bu kişi tarafından değiştirildi captain_turkiye -- 13 Mart 2019; 23:32:9 >







  • Buldum cevabı. Farklı algoritma ile sondan başlayarak bakma.

    public int FindLast(int[] haystack, int[] needle)
    {
    // sondan başlama, kalan array subarraydan daha kısa olana kadar (i >= needle.Length)
    for (var i = haystack.Length - 1; i >= needle.Length - 1; i--)
    {
    var found = true;
    // burada da sondan başlama , eşleşme yoksa duruyor (!found)
    for (var j = needle.Length - 1; j >= 0 && found; j--)
    {
    // compare needle's element with corresponding element of haystack
    found = haystack[i - (needle.Length - 1 - j)] == needle[j];
    }
    if (found)
    // sonucu döndürüyor, ama i son index olduğundan needle'dan uzunluk-1 çıkartıp başını buluyoruz
    return i - (needle.Length - 1);
    }
    // hiç bulamadığı durum,
    return -1;
    }
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.