Sort by

recency

|

542 Discussions

|

  • + 0 comments

    c++

    vector<int> absolutePermutation(int n, int k) {    
        vector<int> permuted(n,0);
        vector<bool> ussage(n,false);
        
        for (int i = 1; i<=n; i++){
            
            if(i-k>0 && ussage[i-k-1]==false){
                permuted[i-k-1] = i;
                ussage[i-k-1] = true;
            }else if(i+k<=n && ussage[i+k-1]==false){
                permuted[i+k-1] = i;
                ussage[i+k-1] = true;
            }else{
                return {-1};
            }       
        }
        
        
        return permuted;
    }
    
  • + 0 comments

    Locksmith explains the concept of absolute permutation, a mathematical problem often explored in algorithm design and competitive programming. It involves arranging numbers in a sequence where the absolute difference between each element and its position matches a given value. Solving absolute permutation requires logical reasoning, efficient coding, and problem-solving skills. This challenge tests algorithmic thinking and is widely used for learning optimization techniques, making it both educational and practical for programmers and students.

  • + 0 comments

    Solution in Java using a HashSet

    public static List<Integer> absolutePermutation(int n, int k) {
        // Write your code here
        var set = new HashSet<Integer>();
        for (var i = 1; i <= n; i++) {
            set.add(i);
        }
        var result = new ArrayList<Integer>();
        for (var i = 1; i <= n; i++) {
            var lowerNumber = i - k;
            var higherNumber = i + k;
            if (set.remove(lowerNumber)) {
                result.add(lowerNumber);
            } else if (set.remove(higherNumber)) {
                result.add(higherNumber);
            } else {
                return List.of(-1);
            }
        }
        return result;
    }
    
  • + 0 comments
    function absolutePermutation($n, $k) {
        $index = [];
        
        for($i = 1; $i <= $n; $i++) {
            $index[$i] = true;
        }
    
        $found = 0;
        $p = [];
        for($number = 1; $number <= $n; $number++) {
            $need1 = $k + $number;
            $need2 = abs($k - $number);
            if(abs($need2 - $number) === $k && ($index[$need2] ?? false)) {
                $index[$need2] = false;
                $p[] = $need2;
                $found++;
            } else if (abs($need1 - $number) === $k && ($index[$need1] ?? false)) {
                $index[$need1] = false;
                $p[] = $need1;
                $found++;
            }
        }
        
        return $found === $n ? $p : [-1];
    }
    
  • + 0 comments

    solution in javascript:

    function absolutePermutation(n, k) {
       const useSet = new Set();
       const res = [];
       
       for(let i = 1; i<=n; i++){
        if((i-k)>=1 && !useSet.has(i-k)){
            res.push(i-k);
            useSet.add(i-k);
        } else if((i+k) <= n && !useSet.has(i+k)){
            res.push(i+k);
            useSet.add(i+k);
        } else{
            return [-1];
        }
       }
       
       return res;
    }