Programming Interview Questions 9: Convert Array
Given an array [a1, a2, ..., aN, b1, b2, ..., bN, c1, c2, ..., cN] convert it to [a1, b1, c1, a2, b2, c2, ..., aN, bN, cN] in-place using constant extra space
#!/usr/bin/python
#http://www.ardendertat.com/2011/10/18/programming-interview-questions-9-convert-array/
import sys
def geti(c, N):
return (c%3) * N + c / 3
def convert(arr):
N = len(arr) / 3
callgeti = 0
for i in range(len(arr)):
j = geti(i, N)
callgeti += 1
while j < i:
j = geti(j, N)
callgeti += 1
arr[i], arr[j] = arr[j], arr[i]
return callgeti
def main():
n = int(sys.argv[1])
arr = [1] * n + [2] * n + [3] * n
callgeti = convert(arr)
print '%d/%d = %.2f\n' % (callgeti, n * 3, float(callgeti) / (n * 3))
if __name__ == '__main__': main()