fork download
  1. def calculateMinimumSwaps(fileSize, affinity):
  2. n = len(fileSize)
  3. conflicts = [i for i in range(n) if fileSize[i] == affinity[i]]
  4. if not conflicts:
  5. return 0
  6.  
  7. non_conflicts = [i for i in range(n) if fileSize[i] != affinity[i]]
  8. swaps = 0
  9. fileSize = fileSize[:]
  10.  
  11. for i in conflicts[:]:
  12. swapped = False
  13. for j in non_conflicts:
  14. fileSize[i], fileSize[j] = fileSize[j], fileSize[i]
  15. if fileSize[i] != affinity[i] and fileSize[j] != affinity[j]:
  16. swaps += 1
  17. conflicts.remove(i)
  18. non_conflicts.remove(j)
  19. swapped = True
  20. break
  21. fileSize[i], fileSize[j] = fileSize[j], fileSize[i]
  22. if not swapped:
  23. continue
  24.  
  25. while len(conflicts) > 1:
  26. i = conflicts.pop()
  27. j = conflicts.pop()
  28. fileSize[i], fileSize[j] = fileSize[j], fileSize[i]
  29. if fileSize[i] != affinity[i] and fileSize[j] != affinity[j]:
  30. swaps += 1
  31. else:
  32. return -1
  33.  
  34. if conflicts:
  35. return -1
  36. return swaps
  37. print(calculateMinimumSwaps([1,2,1,2,1,2],[1,1,2,2,1,2]))
Success #stdin #stdout 0.11s 14152KB
stdin
Standard input is empty
stdout
2