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

  • Người tạo chủ đề Người tạo chủ đề _Gia_Cat_Luong_
  • Ngày bắt đầu Ngày bắt đầu
Trạng thái
Không mở để trả lời thêm.
Java:
class Solution {
  public int[] kWeakestRows(int[][] mat, int k) {
    int[] ans = new int[k];
    int p = 0;
    int M = mat.length, N = mat[0].length;
    boolean[] used = new boolean[M];
    for (int i = 0; p < k && i < N; ++i) {
      for (int j = 0; p < k && j < M; ++j) {
        if (mat[j][i] == 0 && !used[j]) {
          ans[p++] = j;
          used[j] = true;
        }
      }
    }
    for (int i = 0; p < k; ++i) {
      if (!used[i]) {
        ans[p++] = i;
      }
    }
    return ans;
  }
}
 
đầu tuần nhẹ nhàng
C++:
class Solution {
    struct cmp{
        bool operator()(const pair<int,int>& a, const pair<int,int>& b){
            if(a.second == b.second)
                return a.first > b.first;
            return a.second > b.second;
        }
    };
public:
    vector<int> kWeakestRows(vector<vector<int>>& mat, int k) {
        priority_queue<pair<int, int>, vector<pair<int, int>>, cmp> pq;
        for(int i = 0; i < mat.size(); ++i){
            pq.emplace(make_pair(i, accumulate(mat[i].begin(), mat[i].end(), 0)));
        }
        vector<int> result;
        while(k--){
            result.push_back(pq.top().first);
            pq.pop();
        }
        return result;
    }
};
 
k ở đây nó là số row nhỏ nhất trong ma trận hay là số soldier vậy các bác nhỉ?
case của em toàn cu tèo nhờ các bác check giúp

JavaScript:
function kWeakestRows(mat, k) {
  const result = [];
  const rowStrengths = [];

  for (let i = 0; i < mat.length; i++) {
    let count = 0;
    for (let j = 0; j < mat[i].length; j++) {
      if (mat[i][j] === 1) {
        count++;
      } else {
        break;
      }
    }
    rowStrengths.push([i, count]);
  }

  rowStrengths.sort((a, b) => a[1] - b[1] || a[0] - b[0]);

  for (let i = 0; i < k; i++) {
    if (rowStrengths[i] && rowStrengths[i][1] < k) {
      result.push(rowStrengths[i][0]);
    }
  }

  return result;
}
 
Dùng sort thôi, cái thư viện PriorityQueue của thằng LC dùng khai báo kiểu éo gì ấy, mãi ko đc :burn_joss_stick:
Mà bài này test case bé tí, brute-force khéo cũng pass hết
JavaScript:
function kWeakestRows(mat: number[][], k: number): number[] {
    const ans = []
    for (let i = 0; i < mat.length; i++) {
        ans.push([i, bs(mat[i])]);
    }
    return ans.sort((a, b) => {
        if (a[1] !== b[1]) {
            return a[1] - b[1];
        } else {
            return a[0] - b[0];
        }
    }).slice(0, k).map(x => x[0]);
};

function bs(arr: number[]) {
    let left = 0, right = arr.length - 1
    while (left <= right) {
        const mid = (left + right) >> 1;
        if (arr[mid] === 1) left++;
        else right--
    }
    return left;
}
 
Sửa lần cuối:
k ở đây nó là số row nhỏ nhất trong ma trận hay là số soldier vậy các bác nhỉ?
case của em toàn cu tèo nhờ các bác check giúp

JavaScript:
function kWeakestRows(mat, k) {
  const result = [];
  const rowStrengths = [];

  for (let i = 0; i < mat.length; i++) {
    let count = 0;
    for (let j = 0; j < mat[i].length; j++) {
      if (mat[i][j] === 1) {
        count++;
      } else {
        break;
      }
    }
    rowStrengths.push([i, count]);
  }

  rowStrengths.sort((a, b) => a[1] - b[1] || a[0] - b[0]);

  for (let i = 0; i < k; i++) {
    if (rowStrengths[i] && rowStrengths[i][1] < k) {
      result.push(rowStrengths[i][0]);
    }
  }

  return result;
}
k weakest rows, nó ghi rõ thế rồi mà :burn_joss_stick:
 
Gặp bài khó thì nên cố đấm ăn xôi suy nghĩ cho ra hay là đọc solution các bác? :sick:
Python:
class Solution:
    def kWeakestRows(self, mat: List[List[int]], k: int) -> List[int]:
        mat = [(i,sum(mat[i])) for i in range(len(mat))]
        mat.sort(key = lambda x: x[1])
        return [row[0] for row in mat[:k]]
 
JavaScript:
/**
 * @param {number[][]} mat
 * @param {number} k
 * @return {number[]}
 */
var kWeakestRows = function(mat, k) {
    return _.chain(mat)
        .map((row, idx) => [idx, (row.lastIndexOf(1) + 1)* 1000 + idx])
        .sortBy(1)
        .map(0)
        .slice(0, k)
        .value();
};
 
Gặp bài khó thì nên cố đấm ăn xôi suy nghĩ cho ra hay là đọc solution các bác? :sick:
Python:
class Solution:
    def kWeakestRows(self, mat: List[List[int]], k: int) -> List[int]:
        mat = [(i,sum(mat[i])) for i in range(len(mat))]
        mat.sort(key = lambda x: x[1])
        return [row[0] for row in mat[:k]]
Coi như 1 bài pv đi, 45p, nếu ko ra thì đi đọc solution. Chứ bài nào cũng vừa thấy khó đã đọc solution mình nghĩ là cải thiện đc ít lắm :big_smile:
 
Các bác cho em hỏi chút. Khi một công ty có vòng phỏng vấn yêu cầu giải bài trên leetcode, họ có yêu cầu mình sử dụng ngôn ngữ nào cụ thể không ạ? Em làm javascript nhưng thỉnh thoảng luyện bài trên LC vẫn dùng C++, vì e sợ dùng JS nó có nhiều function hỗ trợ quá. Kiểu có nhiều bài toán bên C++ sẽ cần code vài dòng - JS thì chỉ cần một hàm là ra luôn, theo e từng gặp là vậy.
 
Các bác cho em hỏi chút. Khi một công ty có vòng phỏng vấn yêu cầu giải bài trên leetcode, họ có yêu cầu mình sử dụng ngôn ngữ nào cụ thể không ạ? Em làm javascript nhưng thỉnh thoảng luyện bài trên LC vẫn dùng C++, vì e sợ dùng JS nó có nhiều function hỗ trợ quá. Kiểu có nhiều bài toán bên C++ sẽ cần code vài dòng - JS thì chỉ cần một hàm là ra luôn, theo e từng gặp là vậy.
code js k có heap/pq thế k lẽ bác định code nguyên cái heapify function nếu cần pq? :D Dùng mấy thứ đc cho là built-in và nắm time space complexity của nó là oke r. Và nếu yêu cầu ngôn ngữ cụ thể thường yêu cầu java, c++ là nhiều
 
code js k có heap/pq thế k lẽ bác định code nguyên cái heapify function nếu cần pq? :D Dùng mấy thứ đc cho là built-in và nắm time space complexity của nó là oke r. Và nếu yêu cầu ngôn ngữ cụ thể thường yêu cầu java, c++ là nhiều
Cảm ơn bác, ra là vậy ạ. Em chưa biết tới những cái đó :nosebleed:
 
code js k có heap/pq thế k lẽ bác định code nguyên cái heapify function nếu cần pq? :D Dùng mấy thứ đc cho là built-in và nắm time space complexity của nó là oke r. Và nếu yêu cầu ngôn ngữ cụ thể thường yêu cầu java, c++ là nhiều
lc environment có support thư viện cho Queue và PriorityQueue mà:byebye:

via theNEXTvoz for iPhone
 
Java:
public class TheKWeakestRowsInMatrix_1337 {
    public static int[] findWeakestRows(int[][] mat, int m, int n, int k) {
   
        int[] soldierCounts = new int[m];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                soldierCounts += mat[j];
            }
        }

       
        int[] result = new int[m];
        for (int i = 0; i < m; i++) {
            result = soldierCounts;
        }
       
        int[] weakestRows = new int[m];
        for (int i = 0; i < m; i++) {
            weakestRows = i;
        }
       
        for (int i = 0; i < m - 1; i++) {
            for (int j = 0; j < m - i - 1; j++) {
                if (result[j] > result[j + 1]) {
                    int temp = result[j];
                    result[j] = result[j + 1];
                    result[j + 1] = temp;

                    int tempRow = weakestRows[j];
                    weakestRows[j] = weakestRows[j + 1];
                    weakestRows[j + 1] = tempRow;
                }
            }
        }

        int[] resultx = new int[k];
        for (int i = 0; i < k; i++) {
            resultx = weakestRows;
        }
       
        return resultx;
       
    }
   


    public static void main(String[] args) {
        int[][] mat = new int[][]{
            {1,0,0,0},
            {1,1,1,1},
            {1,0,0,0},
            {1,0,0,0}
        };
        int m = mat.length;
        int n = mat[0].length;
        int k = 2;

        int[] result = findWeakestRows(mat, m, n, k);
        System.out.println(Arrays.toString(result));
    }
}

Này gặp bài dễ mới làm được.
 
Các bác cho em hỏi chút. Khi một công ty có vòng phỏng vấn yêu cầu giải bài trên leetcode, họ có yêu cầu mình sử dụng ngôn ngữ nào cụ thể không ạ? Em làm javascript nhưng thỉnh thoảng luyện bài trên LC vẫn dùng C++, vì e sợ dùng JS nó có nhiều function hỗ trợ quá. Kiểu có nhiều bài toán bên C++ sẽ cần code vài dòng - JS thì chỉ cần một hàm là ra luôn, theo e từng gặp là vậy.
nói function hỗ trợ thằng Python còn nhiều nữa, LC nó cho dùng cái gì thì dùng chứ ngại gì lấm bẩn:byebye:

via theNEXTvoz for iPhone
 
Lúc interview có được search mấy cái built in function không các bác nhỉ @@ mấy cái heap stack queue nhiều khi không nhớ syntax :beat_brick:
 
Java:
class Solution {
    public int[] kWeakestRows(int[][] mat, int k) {
        
        int m = mat.length;
        int n = mat[0].length;
        int[] result = new int[k];
        List<Integer> list = new ArrayList<>();
        int cK = 0;
        
        for (int i = 0; i <= n - 1; i++) {
            if (list.size() == k) break;
            for (int j = 0; j <= m - 1; j++) {
                if (list.size() == k) {
                    break;
                }

                if (list.contains(j) == false && mat[j][i] == 0) {
                    list.add(j);
                    cK++;
                }
            }
        }

        if (list.size() < k) {
            for (int i = 0; i <= k -1; i++) {
                if (list.contains(i) == false && list.size() < k) {
                    list.add(i);
                }
            }
        }

        for (int i = 0; i <= k - 1; i++) {
            result[i] = list.get(i);
        }

        return result;
        
    }
}
 
Dùng sort thôi, cái thư viện PriorityQueue của thằng LC dùng khai báo kiểu éo gì ấy, mãi ko đc :burn_joss_stick:
Mà bài này test case bé tí, brute-force khéo cũng pass hết
JavaScript:
function kWeakestRows(mat: number[][], k: number): number[] {
    const ans = []
    for (let i = 0; i < mat.length; i++) {
        ans.push([i, bs(mat[i])]);
    }
    return ans.sort((a, b) => {
        if (a[1] !== b[1]) {
            return a[1] - b[1];
        } else {
            return a[0] - b[0];
        }
    }).slice(0, k).map(x => x[0]);
};

function bs(arr: number[]) {
    let left = 0, right = arr.length - 1
    while (left <= right) {
        const mid = (left + right) >> 1;
        if (arr[mid] === 1) left++;
        else right--
    }
    return left;
}
Fence chuyên xài ts stack à, lấy 1 oop language code cho sướng
À mà Bs của fence sao mà xài ++ với -- kaka.
Mình làm Bs thấy có trick là nếu mình ko muốn return kết quả trả về trong bs thì xài left < right, và return left ở bên ngoài. Ngược lại thì xài left <= right. Xài trick này chưa thấy tạch bao giờ rất ngon :sexy_girl:

Java:
class Solution {
    public int[] kWeakestRows(int[][] mat, int k) {
        
        int m = mat.length;
        int n = mat[0].length;
        int[] result = new int[k];
        List<Integer> list = new ArrayList<>();
        int cK = 0;
        
        for (int i = 0; i <= n - 1; i++) {
            if (list.size() == k) break;
            for (int j = 0; j <= m - 1; j++) {
                if (list.size() == k) {
                    break;
                }

                if (list.contains(j) == false && mat[j][i] == 0) {
                    list.add(j);
                    cK++;
                }
            }
        }

        if (list.size() < k) {
            for (int i = 0; i <= k -1; i++) {
                if (list.contains(i) == false && list.size() < k) {
                    list.add(i);
                }
            }
        }

        for (int i = 0; i <= k - 1; i++) {
            result[i] = list.get(i);
        }

        return result;
        
    }
}
Mấy bài dễ như này nên tìm cách tối ưu để biết thêm nhiều alogrtihm khác nhau, cứ xài for với sort hoài thì nó sẽ ko tối ưu.
Mục tiêu là giải được những bài khó hơn chứ fen cũng đừng nên giải cho nó chạy được là được.
Trừ khi vô contest mới nên xài brute force thôi
via theNEXTvoz for iPhone
 
Sửa lần cuối:
Fence chuyên xài ts stack à, lấy 1 oop language code cho sướng
đi làm chủ yếu làm FE nên code TS thuận tay hơn đó fen, chứ BE code cũng ko dùng mấy cái cấu trúc dữ liệu mấy, đến lúc vào code LC nó không thuận tay
ZBtnCkk.png
Cũng thử Java rồi mà đến lúc không nhớ dùng LinkedList hay Stack, thôi quay về TS cho lành
 
đi làm chủ yếu làm FE nên code TS thuận tay hơn đó fen, chứ BE code cũng ko dùng mấy cái cấu trúc dữ liệu mấy, đến lúc vào code LC nó không thuận tay
ZBtnCkk.png
Cũng thử Java rồi mà đến lúc không nhớ dùng LinkedList hay Stack, thôi quay về TS cho lành
Thấy fence hay kêu vụ PQ mà hình như import vô được mà, fence mò thử. Ngoài ra thì xài Ts cũng ko khác gì ngôn ngữ khác

via theNEXTvoz for iPhone
 
Trạng thái
Không mở để trả lời thêm.

Thống kê chủ đề

Ngày tạo
_Gia_Cat_Luong_,
Người trả lời cuối
Vipluckystar,
Trả lời
17.755
Lượt xem
1.213.821
Quay lại
Lên đầu trang