• + 0 comments

    O(n) greedy approach that dont need to consider corner cases. We always take the (i-k) choice if possible, if not try (i+k), if that fails return -1.

        # Write your code here
        
        '''
        pos[i] = i+k or i-k
        pos[i] = i
        '''
        
        visited = set()
        res = []
        
        for i in range(1, n+1):
            if i-k in visited and i+k in visited:
                return [-1]
                
            if i-k > 0 and i-k not in visited:
                res.append(i-k)
                visited.add(i-k)
            else:
                if i + k > n:
                    return [-1]
                    
                res.append(i+k)
                visited.add(i+k)
        
        return res