Minimum Swaps 2

Sort by

recency

|

2474 Discussions

|

  • + 0 comments
    function minimumSwaps(arr) {
        let count = 0
        for(let i=0; i < arr.length; i++) {
            const current = arr[i]
            const actualValue = i+1
            if(current != actualValue){
                const swapIndex = arr.findIndex((n) => n === actualValue)
                arr[i] = actualValue
                arr[swapIndex] = current
                count++ 
            }
        }
        return count
    }
    
  • + 1 comment
    #include <bits/stdc++.h>
    
    int main () {
        
        int n;
        std::cin >> n;
        
        std::vector<int> nums(n);
        for (auto& val : nums) {
            std::cin >> val;
            --val;
        }
        
        int ans = 0;
        for (int start = 0; start < n; ++start) {
            if (nums[start] == -1)
                continue;
                
            int streak = 0;
            for (int cur = start; nums[cur] != -1;) {
                ++streak;
                const int nei = nums[cur];
                nums[cur] = -1;
                cur = nei;
            }
            
            ans += streak - 1;
        }
        
        std::cout << ans << "\n";
        
        return 0;
    }
    
  • + 0 comments

    simple python code. if u use for loop with this logic it won't work smh.

    def minimumSwaps(arr):
        swaps = 0
        i = 0
        while i < len(arr):
            correct_value = i + 1
            if arr[i] != correct_value:
                swap_idx = arr[i] - 1  # Where this value should be
                arr[i], arr[swap_idx] = arr[swap_idx], arr[i]
                swaps += 1
            else:
                i += 1
        return swaps
    
  • + 0 comments

    c++ code with simple concepts

    " bool checkZero(int num1 , int num2){ if(num1 - num2 == 1){ return true; } return false; } // Complete the minimumSwaps function below. int minimumSwaps(vector arr) { int size = arr.size();

    int temp =0 , swap = 0;
    for(int i = 0; i < size ; i++){
        if(!checkZero(arr[i], i)){
            for(int j = i+1; j < size ;j++){
    
                if(checkZero(arr[j], i)){
                    temp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = temp;
                    swap++;
                    break;
                }
            }
        }
    }
    return swap;
    

    } "

  • + 0 comments

    I noticed that in Julia the code raises error for STDIN written with capital letters. Once I changed it to stdin, everything went smooth. So, I guess you should update the current version (unless I am missing something).