Arama butonu
Bu konudaki kullanıcılar: 1 misafir
18
Cevap
2761
Tıklama
0
Öne Çıkarma
Dizide aranan sayıya en yakın ilk 3 sayıyı bulma.
F
4 yıl
Yüzbaşı
Konu Sahibi

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..



F
4 yıl
Yarbay

şö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.



F
4 yıl
Yüzbaşı
Konu Sahibi

ikinci yöntem daha kullanışlı ve temiz görünüyor, çok teşekkür ederim.


Bu mesaja 1 cevap geldi.
I
4 yıl
Binbaşı

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.


Bu mesaja 1 cevap geldi.
F
4 yıl
Yarbay

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.


Bu mesaja 1 cevap geldi.
F
4 yıl
Yüzbaşı
Konu Sahibi

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.




Bu mesajda bahsedilenler: @funky-nd
F
4 yıl
Yüzbaşı
Konu Sahibi

bu yöntem çok uğraştıracak gibi görünüyor ama genede bi denerim. ilgin için teşekkür ederim.




Bu mesajda bahsedilenler: @I0SER_b0y
T
4 yıl
Yarbay

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:

< Resime gitmek için tıklayın >



< Bu ileti mini sürüm kullanılarak atıldı >

G
4 yıl
Yarbay

M
4 yıl
Yarbay

Heap.



< Bu ileti mobil sürüm kullanılarak atıldı >

T
4 yıl
Yarbay

@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.



< Bu ileti mini sürüm kullanılarak atıldı >

G
4 yıl
Yarbay

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 >

T
4 yıl
Yarbay

Dizi boyunca her sayiya en yakın ilk 3 ve ilk 4 sayıyı listelemek :)
< Resime gitmek için tıklayın >



< Bu ileti mini sürüm kullanılarak atıldı >

M
4 yıl
Yarbay

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.


Bu mesaja 1 cevap geldi.
F
4 yıl
Yüzbaşı
Konu Sahibi

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.


Bu mesaja 1 cevap geldi.
M
4 yıl
Yarbay

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 mesaja 1 cevap geldi.
T
4 yıl
Yarbay

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.



< Bu ileti mini sürüm kullanılarak atıldı >

F
4 yıl
Yüzbaşı
Konu Sahibi

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 >


Bu mesajda bahsedilenler: @vonderplanitz , @mahoni_38
T
4 yıl
Yarbay

@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.



< Bu ileti mini sürüm kullanılarak atıldı >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.