Sorumu kısaltmaya çalıştım, ancak yapabileceğim en iyi şey budur.Öğelerin ilk ve son değerine göre öğeleri algılama ve kaldırma işlemlerinin en etkili yolu
$var = array(
array(1, 2, 3),
array(1, 3),
array(1, 2, 4, 3),
array(1, 3, 4)
);
İstediğim olduğunu $var
tüm diziler kaldırmaktır:
$var
'dan başka bir dizi ile aynıdır, ancak ikincisinden daha fazla öğeye sahiptir.
Yani, aşağıdaki diziler kaldırılmalı: (1, 2, 3)
ve (1, 2, 4, 3)
ikisi de 1
ile başlayıp 3
ile biter ve aynı zamanda başlar ve 1
ve 3
ile biter (1, 3)
, daha unsurları var çünkü. (1, 3, 4)
kalmalıdır, çünkü 1
ile başlayan ve 4
ile biten başka bir dizi yoktur ve bundan daha az öğeye sahiptir.
Bunu yapmanın en etkili yolunu hem bellek hem de zaman açısından arıyorum. $var
, en fazla 100 diziye sahip olabilir ve her bir dizi, içinde en fazla 10 öğeye sahip olabilir. İki eleman arasında bir çeşit karşılaştırma yapmayı düşündüm (for(i=0;...) for(j=i+1;...) complexCompareFunction();
), ama bunun çok verimli olmadığını düşünüyorum. Kullanım current
yapmanız çalıştığınız şey için bir kullanım durumunda var mı? Uygulamanın daha iyi bir yolu olabilir ... – Josh
Kullanıcı tarafından seçilen iki yeri birbirine bağlayan tüm toplu taşıma hatlarının kombinasyonlarını üretiyorum. Oluşturulan satır kombinasyonları dizisinden (bu durumda '$ var'), ekstra bir çizgi kullananları silmek istiyorum. Yani, eğer ikinci noktaya '(1, 3)' ile ulaşırsa, niçin '(1, 2, 3)' de görüntülenmelidir? Burada, '2' satırı ekstra, o olmadan hedefe ulaşabilirsiniz. – linkyndy
belki de 1,2,3 seyahat etmek için daha az zaman alır (çünkü trenle gidiyorsunuz) 1,3'ten (çünkü sadece otobüsle gidebiliyorsunuz). Sorunu yeniden yapılandırabiliriz: İstasyonları düğümler ve kenarlar olarak bağlantıları ile bir grafiğe sahip olun. Her iki düğüm için n, n ile başlayan ve m ile biten en kısa yolu ararsınız. Bu konuda orada tonlarca referans var. – Basti