I am doing a code challenge of codesignal.com which ask for following things: Given an array of integers, sort its elements by the difference of their largest and smallest digits. In the case of a tie, that with the larger index in the array should come first.
For a = [152, 23, 7, 887, 243], the output should be digitDifferenceSort(a) = [7, 887, 23, 243, 152].
Here are the differences of all the numbers:
152: difference = 5 - 1 = 4; 23: difference = 3 - 2 = 1; 7: difference = 7 - 7 = 0; 887: difference = 8 - 7 = 1; 243: difference = 4 - 2 = 2.
23 and 887 have the same difference, but 887 goes after 23 in a, so in the sorted array it comes first. I wrote following code using python3 and it passes all normal tests but it cannot pass execution time tests. How can I improve my code to decrease it's execution time for list with considerable amount of elements?
def digitDifferenceSort(a): diff =  for i in a: i = list(str(i)) diff.append(i) for i in range(len(diff)): for j in range(i+1, len(diff)): if int(max(diff[i])) - int(min(diff[i])) > int(max(diff[j])) - int(min(diff[j])): diff[j], diff[i] = diff[i], diff[j] elif int(max(diff[i])) - int(min(diff[i])) == int(max(diff[j])) - int(min(diff[j])): diff[i], diff[j] = diff[j], diff[i] new_list =  for i in diff: b = '' for j in i: b = b + j new_list.append(int(b)) return new_list