Ruby Solution
```\n# @param {Integer[]} nums\n# @return {Integer[]}\ndef recover_array(nums)\n    nums.sort!\n    uniques = nums.uniq\n    start = uniques.shift\n    tests = 
```\n# @param {Integer[]} nums\n# @return {Integer[]}\ndef recover_array(nums)\n    nums.sort!\n    uniques = nums.uniq\n    start = uniques.shift\n    tests = []\n    n = nums.length / 2\n    for i in 0...uniques.length\n        tests << (uniques[i] - start) / 2 if (uniques[i] - start) % 2 == 0 \n    end\n    \n    \n    puts "start=#{start} tests=#{tests}"\n    \n    while true\n        test_nums = nums.dup\n        test_offset = tests.shift\n        result = []\n        n.times do\n            # look for offset match for leftmost value of test_nums. If not found, fail; if found, delete it and leftmost value\n            test_number = test_nums.shift\n            found = test_nums.index(test_number + test_offset * 2)\n            break if found == nil\n            test_nums.delete_at(found)\n            result << test_number + test_offset\n        end\n        return result if test_nums == []\n    end\n    \n    \n    [3,7,11]\n    \n    \nend\n
[]