thảo luận Leetcode mỗi ngày

Bài hôm nay Easy đội lốt Medium à :shame:
C-like:
class Solution {
    fun compareVersion(version1: String, version2: String): Int {
        val revisions1 = version1.split(".")
        val revisions2 = version2.split(".")
        val maxSize = max(revisions1.size, revisions2.size)
        for (i in 0 until maxSize) {
            val revision1 = revisions1.getOrElse(i) { "0" }.toInt()
            val revision2 = revisions2.getOrElse(i) { "0" }.toInt()
            if (revision1 < revision2) {
                return -1
            } else if (revision1 > revision2) {
                return 1
            }
        }
        return 0
    }
}
 
Python:
class Solution:
    def compareVersion(self, version1: str, version2: str) -> int:
        ver1 = [int(c) for c in version1.split(".")]
        ver2 = [int(c) for c in version2.split(".")]

        for i in range(min(len(ver1),len(ver2))):
            if ver1[i] > ver2[i]: return 1
            elif ver2[i] > ver1[i]: return -1

        for i in range(min(len(ver1),len(ver2)) , max(len(ver1),len(ver2))):
            if len(ver1) > len(ver2) and ver1[i] != 0 : return 1
            if len(ver1) < len(ver2) and ver2[i] != 0 : return -1
            
        return 0
 
Java:
class Solution {
    public int compareVersion(String version1, String version2) {
        String[] part1 = version1.split("\\.");
        String[] part2 = version2.split("\\.");

        int minLength = Math.min(part1.length, part2.length);
        
        for (int i = 0; i < minLength; ++i) {
            int first = Integer.valueOf(part1[i]);
            int second = Integer.valueOf(part2[i]);
            
            if (first > second) {
                return 1;
            } else if (first < second) return -1;
        }
        
        if (part1.length > minLength) {
            for (int i = minLength; i < part1.length; ++i) {
                if (Integer.valueOf(part1[i]) > 0) return 1;
            }
        }
        
        if (part2.length > minLength) {
            for (int i = minLength; i < part2.length; ++i) {
                if (Integer.valueOf(part2[i]) > 0) return -1;
            }
        }
        
        return 0;
    }
}
 
hix ban đầu làm đúng rồi mà dùng hàm ToInt32 với (int) để convert nên bị sai mà không biết, ngồi hơn 1 tiếng mới phát hiện ra, cứ tưởng cách đầu tiên sai nên dùng cách khác :too_sad:
C#:
public class Solution {
    public int CompareVersion(string version1, string version2) {
        version1 += '.';
        version2 += '.';
        int temp1 = 0;
        int temp2 = 0;
        int pointer1 = 0;
        int pointer2 = 0;
        bool check1 = false;
        bool check2 = false;
        while(pointer1 < version1.Length || pointer2 < version2.Length)
        {
            if(pointer1 < version1.Length)
            {
                if(version1[pointer1] != '.')
                {
                    temp1 = temp1*10 + version1[pointer1] - '0';
                }
                else
                {
                    check1 = true;
                    pointer1--;
                }
            }
            if(pointer2 < version2.Length)
            {
                if(version2[pointer2] != '.')
                {
                    temp2 = temp2*10 + version2[pointer2] - '0';
                }
                else
                {
                    check2 = true;
                    pointer2--;
                }
            }
            if(check1 == true && check2 == true)
            {
                if(temp1 < temp2)
                    return -1;
                if(temp1 > temp2)
                    return 1;
                temp1 = 0;
                temp2 = 0;
                pointer1++;
                pointer2++;
                check1 = false;
                check2 = false;
            }
            pointer1++;
            pointer2++;
            if(pointer1 >= version1.Length)
            {
                temp1 = 0;
                check1 = true;
            }
            if(pointer2 >= version2.Length)
            {
                temp2 = 0;
                check2 = true;
            }
        }
        return 0;
    }
}
C#:
public class Solution {
    public int CompareVersion(string version1, string version2) {
        int i = 0;
        version1 += '.';
        version2 += '.';
        int temp = 0;
        Queue<int> queue1 = new Queue<int>();
        Queue<int> queue2 = new Queue<int>();
        while(i < version1.Length)
        {
            if(version1[i] != '.')
            {
                temp = temp*10 + version1[i] - '0';
            }
            else
            {
                queue1.Enqueue(temp);
                temp = 0;
            }
            i++;
        }
        i = 0;
        temp = 0;
        while(i < version2.Length)
        {
            if(version2[i] != '.')
            {
                temp = temp*10 + version2[i] - '0';
            }
            else
            {
                queue2.Enqueue(temp);
                temp = 0;
            }
            i++;
        }
        int temp1 = 0;
        int temp2 = 0;
        while(queue1.Count != 0 || queue2.Count != 0)
        {
            temp1 = 0;
            temp2 = 0;
            if(queue1.Count != 0)
            {
                temp1 = queue1.Dequeue();
            }
            else
            {
                temp1 = 0;
            }
            if(queue2.Count != 0)
            {
                temp2 = queue2.Dequeue();
            }
            else
            {
                temp2 = 0;
            }
            if(temp1 < temp2)
                return -1;
            if(temp1 > temp2)
                return 1;
        }
        return 0;
    }
}
 
Ruby:
def compare_version(version1, version2)
    revision1 = version1.split(".").map(&:to_i)
    revision2 = version2.split(".").map(&:to_i)
    len1, len2 = revision1.length, revision2.length
    if len1 > len2
        revision2 += [0] * (len1 - len2)
    else
        revision1 += [0] * (len2 - len1)
    end

    revision1.each_with_index do |rev1, i|
        return 1 if rev1 > revision2[i]
        return -1 if rev1 < revision2[i]
    end

    0
end
 
Nay nhận feedback 1 bên là giải algo không đưa ra được optimal solution nhanh được như ngừi ta kỳ vọng.
Ngậm ngùi làm leetcode tiếp
Python:
class Solution:
    def compareVersion(self, version1: str, version2: str) -> int:
        version1 = [int(x) for x in version1.split('.')[::-1]]
        version2 = [int(x) for x in version2.split('.')[::-1]]
        while version1 and version2:
            num1 = version1.pop()
            num2 = version2.pop()
            if num1 > num2:
                return 1
            elif num1 < num2:
                return -1
        if version1:
            if sum(version1) == 0:
                return 0
            return 1
        if version2:
            if sum(version2) == 0:
                return 0
            return -1
        return 0
 
Code:
public class Solution {
    public int CompareVersion(string version1, string version2) {
        int leftVal = 1, rightVal = 1, i = 0, j = 0;
        while(i < version1.Length || j < version2.Length){
            while(i < version1.Length && version1 == '0') i += 1;
            while(j < version2.Length && version2[j] == '0') j += 1;
            char tempLeft = i < version1.Length ? version1 : '0';
            char tempRight = j < version2.Length ? version2[j] : '0';
            while(i < version1.Length && version1 != '.') {
                leftVal = leftVal * 10 + (version1 - '0');
                i +=1;
            }
            while(j < version2.Length && version2[j] != '.') {
                rightVal = rightVal * 10 + (version2[j] - '0');
                j +=1;
            }
            if(leftVal > rightVal) return 1;
            if(rightVal > leftVal) return -1;
            i += 1;
            j += 1;
        }
        if(rightVal == leftVal) return 0;
        return rightVal > leftVal ? -1 : 1;
    }
}
 
Last edited:
Nay nhận feedback 1 bên là giải algo không đưa ra được optimal solution nhanh được như ngừi ta kỳ vọng.
Ngậm ngùi làm leetcode tiếp
Python:
class Solution:
    def compareVersion(self, version1: str, version2: str) -> int:
        version1 = [int(x) for x in version1.split('.')[::-1]]
        version2 = [int(x) for x in version2.split('.')[::-1]]
        while version1 and version2:
            num1 = version1.pop()
            num2 = version2.pop()
            if num1 > num2:
                return 1
            elif num1 < num2:
                return -1
        if version1:
            if sum(version1) == 0:
                return 0
            return 1
        if version2:
            if sum(version2) == 0:
                return 0
            return -1
        return 0
gặp bài nào mà optimal thế thím?
 
Python:
class Solution:
    def compareVersion(self, version1: str, version2: str) -> int:
        arr1 = [int(i) for i in version1.split('.')]
        arr2 = [int(i) for i in version2.split('.')]
        
        length = max(len(arr1), len(arr2))
        arr1 += [0] * (length - len(arr1))
        arr2 += [0] * (length - len(arr2))
        
        for i in range (length):
            if arr1 > arr2:
                return 1
            if arr1 < arr2:
                return -1
            
        return 0
 
Java:
public class Solution {
    public int compareVersion(String version1, String version2) {
        String[] revisions1 = version1.split("\\.");
        String[] revisions2 = version2.split("\\.");

        int length = Math.max(revisions1.length, revisions2.length);

        for (int i = 0; i < length; i++) {
            int rev1 = (i < revisions1.length) ? Integer.parseInt(revisions1[i]) : 0;
            int rev2 = (i < revisions2.length) ? Integer.parseInt(revisions2[i]) : 0;

            if (rev1 < rev2) {
                return -1;
            } else if (rev1 > rev2) {
                return 1;
            }
        }

        return 0;
    }
}
@LmaoSuVuong
fd80e89f23663dc95baacfdb1f9c6bb9.gif
 
Java:
public class Solution {
    public int compareVersion(String version1, String version2) {
        String[] revisions1 = version1.split("\\.");
        String[] revisions2 = version2.split("\\.");

        int length = Math.max(revisions1.length, revisions2.length);

        for (int i = 0; i < length; i++) {
            int rev1 = (i < revisions1.length) ? Integer.parseInt(revisions1[i]) : 0;
            int rev2 = (i < revisions2.length) ? Integer.parseInt(revisions2[i]) : 0;

            if (rev1 < rev2) {
                return -1;
            } else if (rev1 > rev2) {
                return 1;
            }
        }

        return 0;
    }
}
@LmaoSuVuong View attachment 2473567
bài hôm nay ez mà nhưng mà mới biết thêm split dấu . java nó ko chạy
s80uLz1.png
 
Mấy câu dp thường thì có thể giảm space nữa, chắc họ yêu cầu thế
Thừa 1 variable constant extra space so với optimal solution. Mà failed chắc do không giải thích được lý do thừa variable này. Với chắc khi giải tạo ra không khí căng thẳng với interviewer.
 
Last edited:
public class Solution {
public int CompareVersion(string version1, string version2) {
int leftVal = 1, rightVal = 1, i = 0, j = 0;
while(i < version1.Length || j < version2.Length){
while(i < version1.Length && version1 == '0') i += 1;
while(j < version2.Length && version2[j] == '0') j += 1;
char tempLeft = i < version1.Length ? version1 : '0';
char tempRight = j < version2.Length ? version2[j] : '0';
while(i < version1.Length && version1 != '.') {
leftVal = leftVal * 10 + (version1 - '0');
i +=1;
}
while(j < version2.Length && version2[j] != '.') {
rightVal = rightVal * 10 + (version2[j] - '0');
j +=1;
}
if(leftVal > rightVal) return 1;
if(rightVal > leftVal) return -1;
i += 1;
j += 1;
}
if(rightVal == leftVal) return 0;
return rightVal > leftVal ? -1 : 1;
}
}
btw bác bọc thêm tag code bên trong tag spoiler nữa thì sẽ dễ nhìn hơn ấy, tag code nằm bên phải tag spoiler trên thanh công cụ nhé :smile:
Chưa mượt đó thím. Hồi đó cày bộ DP như các thím thì đã ngon lành. Lười nhác giờ mới giải được trăm câu :bad_smelly:
hi bác cho em xin link bộ DP đó được không ạ, em mới làm leetcode gặp mấy bài DP toàn tạch
9WTyCsl.gif
 
btw bác bọc thêm tag code bên trong tag spoiler nữa thì sẽ dễ nhìn hơn ấy, tag code nằm bên phải tag spoiler trên thanh công cụ nhé :smile:

hi bác cho em xin link bộ DP đó được không ạ, em mới làm leetcode gặp mấy bài DP toàn tạch
9WTyCsl.gif
đây bác. có ac premium thì làm thêm bộ advance nữa
 
Python:
class Solution:
    def numRescueBoats(self, people: List[int], limit: int) -> int:
        people = sorted(people)
        left = 0
        right = len(people) - 1
        boats = 0
        while left <= right:
            if people[right] + people[left] <= limit:
                left += 1
            
            right -=1
            boats += 1

        return boats
 
Back
Top