Missing Numbers

Sort by

recency

|

1244 Discussions

|

  • + 0 comments

    Hash map and reallocate array

    1. Time Complexity: O(n)
    2. Space Complexity: O(n)
    int find_min(int* arr, int arr_count){
        int min_num = arr[0];
        for (int i=1; i<arr_count; i++){
            if(arr[i] < min_num){
                min_num = arr[i];
            }
        }
        return min_num;
    }
    
    int* append(int* arr, int* size, int number){
        int new_size = *size+1;
        arr = (int* )realloc(arr, new_size*sizeof(int));
        arr[*size] = number;
        *size = new_size;
        return arr;
    }
    
    int* missingNumbers(int arr_count, int* arr, int brr_count, int* brr, int* result_count) {
        // Initialize NULL pointer
        int* res_arr = NULL;
        *result_count = 0;
        
        // find brr minimum element
        int brr_min = find_min(brr, brr_count);
        // initialize the array with zeros
        int* brr_freq = (int* )calloc(100, sizeof(int));
        
        for (int i = 0; i<brr_count; i++){
            brr_freq[brr[i]-brr_min] ++;
        }    
        for (int i = 0; i< arr_count; i++){
            brr_freq[arr[i]-brr_min] --;
        }
        for (int i = 0; i<100; i++){
            if (brr_freq[i] != 0){
                res_arr = append(res_arr, result_count, (i+brr_min));
            }
        }
        return res_arr;
    }
    
  • + 0 comments

    Here is my c++ solution, you can watch the explanation here : https://youtu.be/6AXUA5_XwUw

    vector<int> missingNumbers(vector<int> arr, vector<int> brr) {
        map<int, int> mp;
        for(int i = 0; i < brr.size(); i++) mp[brr[i]]++;
        for(int i = 0; i < arr.size(); i++) mp[arr[i]]--;
        map<int, int>::iterator it;
        vector<int> result;
        for(it = mp.begin(); it != mp.end(); it++)
            if(it->second > 0) result.push_back(it->first);
        
        return result;
    }
    
  • + 0 comments

    RUST:

    fn missingNumbers(arr: &[i32], brr: &[i32]) -> Vec<i32> {
        let mut count_arr: HashMap<i32,i32> = HashMap::new();
        let mut count_brr: HashMap<i32,i32> = HashMap::new();
        let mut result: Vec<i32> = Vec::new();
    
        for num in arr {
            count_arr.entry(*num).and_modify(|c| *c+=1).or_insert(1);
        }
        for num in brr {
            count_brr.entry(*num).and_modify(|c| *c+=1).or_insert(1);
        }
        for (num, _) in &count_brr {
            if count_brr.get(&num).unwrap_or(&0) > count_arr.get(&num).unwrap_or(&0) {
                result.push(*num);
            }
        }
        result.sort();
        result
    }
    
  • + 1 comment

    Here is my Python solution!

    def missingNumbers(arr, brr):
        arr = Counter(arr)
        brr = Counter(brr)
        missing = []
        for num in brr.keys():
            if arr[num] < brr[num]:
                missing.append(num)
        return sorted(list(set(missing)))
    
    • + 1 comment

      I think, you can just do the difference between the Counter objects. def missingNumbers(arr, brr): arr = Counter(arr) brr = Counter(brr) missing = brr - arr return sorted(list(missing))

      • + 0 comments

        I'm not very familiar with Counter objects so I didn't know this existed.

  • + 0 comments

    Dont judge me i am just starting

    public static List<Integer> missingNumbers2(List<Integer> arr, List<Integer> brr) {
        if (arr.isEmpty() || brr.isEmpty() || arr.size() > brr.size()) return null;
        HashMap<Integer, Integer> frequency = new HashMap<>();
        HashMap<Integer, Integer> frequency2 = new HashMap<>();
    
        List<Integer> list = new ArrayList<>();
        for (int eArr : arr) {
            frequency2.put(eArr, frequency2.getOrDefault(eArr, 0) + 1);
        }
        for (int eBrr : brr) {
            frequency.put(eBrr, frequency.getOrDefault(eBrr, 0) + 1);
        }
        for (var entry : frequency.entrySet()){
            int key = entry.getKey();
            int value = entry.getValue();
            int value2 = frequency2.getOrDefault(key,0);
            if (value != value2){
                list.add(key);
            }
        }
    
        return list;
    }