Java LeetCode çözümü doğru mu?

AliEgemen

Hectopat
Katılım
26 Ocak 2020
Mesajlar
2.865
Çözümler
7
Yer
İstanbul

LeetCode kullanmaya yeni başladım. Hiçbir yardım almadan bunu çözmem 2 saat sürdü :D. her ihtimali göz önünde bulundurmaya çalıştım ama tam oldu mu emin değilim. Bi incelerseniz çok sevinirim. Java kullandım. Test edince çalışıyor fakat LeetCode çok basit örneklerle test ettiğinden daha karmaşık durumlarda ne yapar bilmiyorum.

Java:
class Solution {
    public boolean canJump(int[] nums) {
        int currentIndex = 0;
        int furthestPossible;
        boolean canReach = true;
        while(currentIndex < (nums.length-1)){
            furthestPossible = nums[currentIndex];
            if(furthestPossible == 0){
                canReach = false;
                break;
            }
            for(int i = 1; i < nums[currentIndex] && (currentIndex + i) < nums.length; i++){
                if(furthestPossible < nums[currentIndex+i]+i){
                    for(int j = nums[currentIndex+i]+i; j > furthestPossible; j--){
                        if(j+currentIndex < nums.length-1){
                             if(nums[currentIndex+j] != 0){
                                furthestPossible = j;
                                break;
                            }
                        }
                        else{
                            furthestPossible = j;
                            break;
                        }                     
                    }
                }
            }
            currentIndex += furthestPossible;
        }
        return canReach;
    }
}
 
Öncelikle tebrik ederim hiçbir yardım almadan ve yeni başlayan birine göre matıgı cok guzel çözmüşsünüz. Kod daha iyi hale getirilebilir ama böyle de çalışır.
 
Öncelikle tebrik ederim hiçbir yardım almadan ve yeni başlayan birine göre matıgı cok guzel çözmüşsünüz. Kod daha iyi hale getirilebilir ama böyle de çalışır.
Teşekkürler hocam submit ettim. Testlerin 170/172 tanesini geçmiş ama 2 tanesinde kalmis maalesef.

Eğer array sonu

3 1 0 0 gibi birseyle biterse eğer bir onceki adımda currentIndex "1"e işaret ediyor çünkü 0 olmayan en uzak eleman o. Ama 1den sonra 2 ilerleme yolu olmadigindan return=false oluyor. Fakat true olmali çünkü 3e gelinirse sona ulasabilir. Bunu da kontrol etmek cok karmasik geldi hicbir fikrim yok.
 
class Solution
{
public boolean canJump(int [ ] nums)
{
int max1= 0;
for (int i = 0; i < nums.length; i++)
{
if (i > max1) return false;
max1= Math.max(max1, i + nums);
}
return true;
}
}


Böyle bi şey mi hocam.
 
class Solution {
public boolean canJump(int[] nums) {
int reachable = 0;
for(int i = 0; i < nums.length; i ++) {
if(i > reachable) return false;
reachable = Math.max(reachable, i + nums);
}
return true;
}
}

Çözüm buymuş... Daha çok yolum var gibi. :D
 
i = 0 , max1 = max(0, 0 + 3) = 3
i = 1 , max1 = max(3, 1 + 1) = 3
i = 2, i = 3, i > max1
döngü bitti başa dön

class Solution {
public boolean canJump(int[] nums) {
int reachable = 0;
for(int i = 0; i < nums.length; i ++) {
if(i > reachable) return false;
reachable = Math.max(reachable, i + nums);
}
return true;
}
}

Çözüm buymuş... Daha çok yolum var gibi. :D
Yola devam hocam zeki birine benziyonuz zaten maşallah kısa sürede kaparsınız kendinizi verirseniz :)
 

Yeni konular

Geri
Yukarı