Şimdi Ara

Dizide aranan sayıya en yakın ilk 3 sayıyı bulma.

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
20
Cevap
0
Favori
2.781
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • selamlar.
    diziyi sıraladıktan sonra istenilen sayıyı dizide arattıktan sonra o sayıdan bir önceki ve bir sonraki sayıyı yazdırarak yaptım fakat herzaman doğru çalışmıyor.
    mesela aranan sayı dizide 1. sırada ise bi önceki sayıyı yazdıramaz çünkü orada bir sayı yok. bu durumu koşul ekleyerek giderdim fakat yamalı pantalon gibi oldu hoşuma gitti.
    çözemediğim durum ise, dizide aranan sayıdan birden fazla var ise program kullanılamaz hale geliyor. örn, aranan sayı 1088, dizide iki tane 1088 var ise anlansız sonuçlar yazıyor konsola.

    bu mantıkla olmayacak belliki başka nasıl yapabileceğim hakkında fikir gerekiyor..



  • şöyle bir seri düşünelim:
    12,13,890,900,910,920,930

    verilen sayı da 890 olsun.

    890'dan başlıycaksın.

    solu ve sagı dolu mu diye bakıcaksın. ikisi de dolu. devam.

    sonra hangisiyle arasındaki fark daha az: 900 ile. 1.yi aldık.

    sonra da 13 ve 910'u karşılaştırcaksın. 910'u da aldık.

    sonra 13 ve 920'yi. 920'yi de aldık.

    bitti.


    bu yöntemi sevmediysen şöyle bir şey olabilir:

    dizi sıralı verilmediyse baştan, sıralamaya gerek yok.

    dizideki her elemanın bizim elemana farkını bir hashmap'te tutacaksın.

    hashmap valuelarını sortlayacaksın. en düsük mutlak degerli 3 eleman bizim closes threemiz olacak.
  • ikinci yöntem daha kullanışlı ve temiz görünüyor, çok teşekkür ederim.
  • benim de aklıma hiç sort yapmadan ama birazcık uzun bir yol geldi diyelim ki verilerimiz referance Type olan static Array inimizin içinde

    biz de içinde bir sayı seçip o sayının bir büyügünü ve bir küçügünü arayacagız sanırım olay bu

    öncelikler bi tane boolen Contain methodu yazalım ki var mı yok mu bilelim olmayan bir degeri aramayalım elimizde bi tane boolean

    deger döndüren Contain methodu var şimdi bi tane de void preNext diye method olsun

    34,546,6778,13,456,6778,53443,68789

    dizini elemanları bunlar ben 13 elemanın seçtim diyelim parametre alan fonksiyonumuz içinde ve method bana

    34 döndürmesi lazım 13 den küçük deger yok buraya kadar sorun yok sanırım soyler bir döngü içinde

    for(int i=0;i<arraySize;i++){

    if(array>choosenValue){

    daha onceden tanımlanan int min = 0 olacak

    aradaki farkın seçilen degerle en az oldugu degeri saglayan dizideki eleman o dizide seçilen dizini bir önceki veya bir sonraki

    degeri olmaldır.

    13 sırayla 34 576 ile cıkarılacak ama her cıkarıldıktan sonra da kontrol edilecek

    cunku sonra gelen deger aradaki farkı daha tutarsa bu daha yakın oldugunu gösterir

    int max ve int min adında 2 tane deger tutacak primitve type lazım bize

    anlatması biraz karışık yazması biraz daha kolay ama cok basit bir mantık bence biraz Greedy oldu elbette büyük dizilerde compiler time fazlasıyla şişer.




  • quote:

    Orijinalden alıntı: Fiasco

    ikinci yöntem daha kullanışlı ve temiz görünüyor, çok teşekkür ederim.
    komple listeyi sortlamak yerine
    https://www.geeksforgeeks.org/find-the-largest-three-elements-in-an-array/

    direk en kücük üç mutlak deger de bulunabilir daha az costla.
  • funky-nd kullanıcısına yanıt
    verdiğiniz ikinci yöntem yeterli geldi. gayette güzel oldu teşekkür ederim. birinci yöntem de parçala ve fethet algoritması mantığıyla çalışıyor sanırım onuda yarın denerim.
  • I0SER_b0y kullanıcısına yanıt
    bu yöntem çok uğraştıracak gibi görünüyor ama genede bi denerim. ilgin için teşekkür ederim.
  • Bence en pratik yol dizide aranan sayı hariç diger sayıların 3'lü kombinlerini çıkarıp onların içinde farkı en az olanı bulmak.

    Örnek bir implementasyon:

    Dizide aranan sayıya en yakın ilk 3 sayıyı bulma.
  • Dizide aranan sayıya en yakın ilk 3 sayıyı bulma.
  • Heap.
  • @Gökşen PASLI 2 satırda gayet iyi bir çözüm fakat sanırım aranan sayı 7'yi int dizisinden silip öyle çalıştırmak gerekiyor.
  • yediye en yakınları buluyor Abs içindeki 7 yi üst satırda aranan sayı olarak ayarlamam gerekirdi orda karışıklık olmuş



    < Bu mesaj bu kişi tarafından değiştirildi Gökşen PASLI -- 26 Şubat 2020; 22:33:41 >
  • Dizi boyunca her sayiya en yakın ilk 3 ve ilk 4 sayıyı listelemek :)
    Dizide aranan sayıya en yakın ilk 3 sayıyı bulma.
  • map reduce ile yeni array olustururdum.. Elimdeki sayi + istenilen sayi ile olan arasindaki farki bulan. sonra bu array farka gore sort ederdim. Sorted arraydan aldigin ilk 3 eleman aradigin degeri verir.
  • quote:

    Orijinalden alıntı: mahoni_38

    map reduce ile yeni array olustururdum.. Elimdeki sayi + istenilen sayi ile olan arasindaki farki bulan. sonra bu array farka gore sort ederdim. Sorted arraydan aldigin ilk 3 eleman aradigin degeri verir.
    peki dizi'den istenilen sayıyı çıkardığınızda sonuç negatif olduğu durumlarda ne yapardınız. ekstra bir sorun daha oluşuyor negatiflerde, şöyle örnek göstereyim. dizideki sayi örn olarak 20 olsun. bizim sayimiz ise 80. sonuç -60 çıkar ve siralama yapar isek birinci sıraya yerleşir muhtemelen ama asıl sorun burada oluşuyor pozitif sayıları kontol ettiğimizde elimizdeki sayıya daha yakın sayılar az önce örneğini verdiğim durumdan dolayı atıyorum 1. sıraya 2. sıraya yerleşmek yerine 5. sıraya 6. sıraya yerleşir dolayısıyla sonuç yanlış olur.
  • quote:

    Orijinalden alıntı: Fiasco

    peki dizi'den istenilen sayıyı çıkardığınızda sonuç negatif olduğu durumlarda ne yapardınız. ekstra bir sorun daha oluşuyor negatiflerde, şöyle örnek göstereyim. dizideki sayi örn olarak 20 olsun. bizim sayimiz ise 80. sonuç -60 çıkar ve siralama yapar isek birinci sıraya yerleşir muhtemelen ama asıl sorun burada oluşuyor pozitif sayıları kontol ettiğimizde elimizdeki sayıya daha yakın sayılar az önce örneğini verdiğim durumdan dolayı atıyorum 1. sıraya 2. sıraya yerleşmek yerine 5. sıraya 6. sıraya yerleşir dolayısıyla sonuç yanlış olur.

    Alıntıları Göster
    Sen uzaklığı arıyorsun. en yakın dediğin değer mutlak değer olmalı. Yani sen onu negatiflikten arındırmalısın.

    misal 14 -10 , 0 , 11 , 12 , 8 olsun elimizde 9 rakamına en yakın değeri arıyoruz.
    [ [14,5] , [-10, 19], [0, 9] , [11,2], [12,3],[8,1] ]

    sonra arrayın ikinci elemanına göre sort edersen ilk3 sana en yakını verir. Memory kullanımı ve Big-O açısından daha iyi çözümler olabilir elbette. ama it works



    < Bu mesaj bu kişi tarafından değiştirildi mahoni_38 -- 6 Mart 2020; 21:12:58 >




  • Bu problem kapsamında, fark negatif cıkan sayılar için ABS ile mutlak degerleri almak doğru sonuç verir. Benim yukardaki çözümümde abs kullandım örneğin ve görüldüğü gibi doğru sonuç verdi.

    mahoni 'nin bahsettiği map reduce, büyük veri / big data işlemlerinde kullanılan bir algoritma, bu problemde gereksiz.
  • peki, çikan sonuc negatif olursa onu eksi ile çarpıp pozitif yaparız sorun değil. geriye bir pürüz daha kalıyor aklıma takılan. şöyle açıklayayım;
    konsola yazdırma esnasında, değerler array içinde tutulu olsun. konsola yazdırırken dizi içindeki değeri görmek için çıkardığımız sayıyı yazdırırken "array + sayi" şeklinde yazdırmamız gerekir ancak bu şekilde değerler isabetli olur.
    fakat biz negatif sayıyı pozitif sayıya çevirirsek, konsola yazdırdığımız zaman dizideki sıralanmış değeri fazladan yazar. bu sorun nasıl çözülebilir ?



    < Bu mesaj bu kişi tarafından değiştirildi Fiasco -- 7 Mart 2020; 0:57:23 >
  • @Fiasco sonuç array 'i yazıdırırken negatifi pozitif yapayım öyle yazdırayım şeklinde bir işleme bağımlı olmaman daha iyi yoksa bahsettiğin türde hata verebilir işleri zorlaştırabilir.

    Benim yukardaki çözümümde örneğin sonuç array'i @comb (Raku programlama dilinde array'lerin başına @ konuluyor) 'un $i endeksli elemanı ki o da bir array (yani @comb, arraylar arrayı) yani sonuç arrayi @comb[$i] (Raku programlama dilinde tüm normal / skalar degerlerin başına $ konuluyor)

    Sonuçları renkli basmak için <12 13 89 76 90 45 91 7 66 18> olan orjinal array de bir döngü kurup, orjinal array'deki eleman @comb[$i] 'daki elemanlardan biri ise yeşil renk bastım. Gördüğün gibi program dizideki her bir degere en yakın 3 degeri tek tek bulup basıyor.

    Raku programlama dili bilmiyorsan, aynı programı Python ile de yazabilirim.




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.