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.
C-like:
use std::collections::{HashMap, BTreeSet};
impl Solution {
    pub fn array_rank_transform(arr: Vec<i32>) -> Vec<i32> {
        let rank_of = BTreeSet::<_>::from_iter(arr.iter().cloned())
            .into_iter()
            .enumerate()
            .fold(HashMap::new(), |mut rank_of, (idx, num)| {
                rank_of.insert(num, idx as i32 + 1);
                rank_of
            });
        arr.iter().map(|num| rank_of[num]).collect()
    }
}
 
Sửa lần cuối:
cái đoạn key = list(map……. kia thành O n^2
key = map + 1 thôi

via theNEXTvoz for iPhone
thế éo nào e thấy geekforgeek nó bảo là O(1)
AsBPJOY.png
1727839913765.png
 
Java:
class Solution {
    public int[] arrayRankTransform(int[] arr) {
        int[] res = new int[arr.length];
        int[] newArr = Arrays.copyOfRange(arr, 0, arr.length);
        Arrays.sort(newArr);
        Map<Integer, Integer> map = new HashMap<>();
        int index = 0;
        for (int i : newArr) {
            if (map.containsKey(i)) {
                continue;
            }
            map.put(i, index++);
        }
        index = 0;
        for (int i : arr) {
            res[index++] = map.get(i) + 1;
        }
        return res;
    }
}
Python:
class Solution:
    def arrayRankTransform(self, arr: List[int]) -> List[int]:
        res = []
        newArr = arr.copy()
        newArr.sort()
        map = {}
        for i in range(0, len(newArr)):
            map[newArr[i]] = i
        for i in arr:
            key = list(map.keys()).index(i) + 1
            res.append(key)
        return res
xjIzSG9.png
init 1 cái list(...) trong loop thế kia là ko được rồi, On2 ngay.
 
Python:
class Solution:
    def arrayRankTransform(self, A: List[int]) -> List[int]:
        B = sorted(set(A))
        C = {r:l + 1 for l,r in enumerate(B) }
        return [C[a] for a in A ]
 
LC 1331 Map
Java:
class Solution {
    public int[] arrayRankTransform(int[] arr) {
        int[] cp = new int[arr.length];
        System.arraycopy(arr, 0, cp, 0, arr.length);
        java.util.Arrays.sort(cp);
        java.util.Map<Integer, Integer> map = new java.util.HashMap<>();
        int rank = 1;
        for (int e : cp) {
            if (map.get(e) == null) map.put(e, rank++);
        }
        java.util.stream.IntStream.range(0, arr.length).parallel().forEach(i -> arr[i] = map.get(arr[i]));
        return arr;
    }
}
 
Sửa lần cuối:
nhẹ nhàng
Java:
class Solution {
    public int[] arrayRankTransform(int[] arr) {
        int n = arr.length;
        if (n==0)
            return arr;
        HashMap<Integer,Integer> map = new HashMap<>();
        int[] arr2 = arr.clone();     
        Arrays.sort(arr2);
        int index =1;
        map.put(arr2[0],index++);
        
        for(int i = 1;i<n;i++)
            if(arr2[i]!=arr2[i-1])
                map.put(arr2[i],index++);
    
        for(int i = 0; i<n;i++)
            arr[i] = map.get(arr[i]);
        
        return arr;
    }
}
 
Nay rảnh rảnh ngồi làm 2 bài Find Peak Element, khá thú vị. Ae rảnh vô làm chơi :byebye:
You must write an algorithm that runs in O(log n) time: cái dòng này lộ liễu quá. ko nói thì chắc cũng ko đoán dc
xài template thôi chứ cũng ko biết vì sao nó lại chạy đúng
bctXtWF.png

Java:
class Solution {
    public int findPeakElement(int[] nums) {
        int n = nums.length;
        int l =0 ;
        int r =n;
        while(l<r){
            int mid = (r+l)>>1;
            if(nums[mid]>nums[(mid-1+n)%n] && nums[mid]>nums[(mid+1)%n]) return mid;
            else if(nums[mid]>nums[(mid-1+n)%n] && nums[mid]<nums[(mid+1)%n]) l =mid+1;
            else r =mid;
        }
        return l;
    }
}
 
Mao huynh à, chỗ này viết là m -1 thôi có đc ko?
+n % n = +0
mid-1 % n = mid - 1 vì mid < n
java số âm% nó ra âm nên bỏ vô cho đỡ phải suy nghĩ lăn tăn edge case đó
pMlnzFJ.png
mid=0 -> -1 %n=-1 cái ăn bọ liền
boundary bài này 0<=mid<=n mà
 
Sửa lần cuối:
You must write an algorithm that runs in O(log n) time: cái dòng này lộ liễu quá. ko nói thì chắc cũng ko đoán dc
xài template thôi chứ cũng ko biết vì sao nó lại chạy đúng
bctXtWF.png

Java:
class Solution {
    public int findPeakElement(int[] nums) {
        int n = nums.length;
        int l =0 ;
        int r =n;
        while(l<r){
            int mid = (r+l)>>1;
            if(nums[mid]>nums[(mid-1+n)%n] && nums[mid]>nums[(mid+1)%n]) return mid;
            else if(nums[mid]>nums[(mid-1+n)%n] && nums[mid]<nums[(mid+1)%n]) l =mid+1;
            else r =mid;
        }
        return l;
    }
}
yep, bài này nó cho 2 cái điều kiện biên thế kia thì mới xác định được là luôn luôn có peak :sweet_kiss:
 
C#:
public class Solution {
    public int[] ArrayRankTransform(int[] arr) {
        int[] index = new int[arr.Length];
        for (int i = 0; i < arr.Length; ++i) {
            index[i] = i;
        }
        Array.Sort(index, (i, j) => (arr[i] - arr[j]));
        int[] res = new int[arr.Length];
        int rank = 1;
        for (int i = 0; i < arr.Length; ++i) {
            if (i > 0 && arr[index[i]] == arr[index[i-1]]) rank--;
            res[index[i]] = rank++;
        }
        return res;
    }
}
 
Java:
class Solution {
    public int[] arrayRankTransform(int[] arr) {
        int n = arr.length;
        int[] sortedArr = arr.clone();
        Arrays.sort(sortedArr);       

        Map<Integer, Integer> map = new HashMap<>();

        int rank = 1;
        for (int num : sortedArr) {
            if (map.containsKey(num)) {
                continue;
            }
            map.put(num, rank++);
        }

        int[] res = new int[n];

        for (int i = 0; i < n; i++) {
            res[i] = map.get(arr[i]);
        }

        return res;
    }
}
 
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.215.557
Quay lại
Lên đầu trang