因此,我试图解决代码大战中的“数字差排序”问题。
给定一个整数数组,根据其最大位数和最小位数的差异对其元素进行排序。在领带的情况下,如果数组中的索引更大,则应该放在第一位。 示例 对于a= 152,23,7,887,243,输出应该是digitDifferenceSort(a) = 7,887,23,243,152。 以下是所有数字的差异: 152:差异=5-1= 4; 23:差异=3-2= 1; 7:差异=7-7= 0; 887:差异=8-7= 1; 243:差额=4-2= 2。 23和887有相同的区别,但是887在a中是在23之后,所以在排序数组中它是第一位的。
我有一个问题,两个数字有相同的差异。到目前为止,我写的是:
int[] digitDifferenceSort(int[] a) {
return a.OrderBy(x => difference(x)).ToArray();
}
int difference(int x)
{
int min = 9, max = 0;
do
{
int tmp = x % 10;
min = Math.Min(min, tmp);
max = Math.Max(max, tmp);
} while ((x /= 10) > 0);
return max - min;
}
没有做太多(例如,输出仍然是[7, 23, 887, 243, 152]
而不是[7, 887, 23, 243, 152]
)
如何使索引更大的元素成为结果的第一位?我应该用什么代替OrderBy?
发布于 2018-02-11 14:25:47
我不考虑您的difference
方法,我认为它工作得很好。对于您的问题:您必须保持数组的受人尊敬的顺序(相同差异到达的项目将被反向排序)。要做到这一点,只需反转输入数组:所有不完全相同的项都将被正确排序,而具有相同差异的项将被反向排序:
int[] digitDifferenceSort(int[] a)
{
return a.Reverse().OrderBy(x => difference(x)).ToArray();
}
发布于 2019-04-04 18:21:12
下面是我的代码,上面的问题数字差排序。在Eclipse中运行时,我也会得到输出,但是当我将代码粘贴到代码信号上时,它会给我一个空指针异常。
package NormalPrograms;
import java.util.ArrayList;
import java.util.Collections;
public class DigitDifferenceSort {
// For index wise sorting in descending order
public static int[] sortingnumberindexwise(int[] a, ArrayList<Integer> index) {
int k = 0;
int[] res = new int[index.size()];
int[] finalres = new int[index.size()];
for (int i = a.length - 1; i >= 0; i--) {
for (int j = 0; j < index.size(); j++) {
if (a[i] == (int) index.get(j)) {
res[k] = i;
index.remove(j);
k++;
break;
}
}
}
int g = 0;
k = 0;
for (int i = 0; i < res.length; i++) {
finalres[g] = a[res[k]];
g++;
k++;
}
return finalres;
}
public static int[] finddigitDifferenceandSort(int[] p) {
int[] finres = new int[p.length];
for (int i = 0; i < finres.length; i++) {
finres[i] = p[i];
}
// This finres array act as an temp array and reused to make final result array
int digit = 0;
ArrayList<Integer> A = new ArrayList<Integer>();
ArrayList<ArrayList<Integer>> B = new ArrayList<ArrayList<Integer>>();
for (int i = 0; i < 10; i++) {
B.add(new ArrayList<Integer>());
}
for (int i = 0; i < p.length; i++) {
int temp = 0;
temp = p[i];
while (p[i] > 0) {
digit = p[i] % 10;
p[i] /= 10;
A.add(digit);
}
int b = Collections.max(A);
int c = Collections.min(A);
int diff = b - c;
B.get(diff).add(temp);
A.clear();
}
for (int i = 0; i < B.size(); i++) {
if (B.get(i).size() > 1) {
ArrayList<Integer> C = new ArrayList<Integer>();
for (int k = 0; k < B.get(i).size(); k++) {
C.add(B.get(i).get(k));
}
B.get(i).clear();
for (int j : sortingnumberindexwise(finres, C)) {
B.get(i).add(j);
}
} else {
continue;
}
}
int k = 0;
for (int i = 0; i < B.size(); i++) {
for (int j = 0; j < B.get(i).size(); j++) {
if (B.get(i).size() == 0)
continue;
else {
finres[k] = B.get(i).get(j);
k++;
}
}
}
return finres;
}
public static void main(String[] args) {
int[] a = { 12, 21, 1, 1, 1, 2, 2, 3 };
for (int i : finddigitDifferenceandSort(a)) {
System.out.print(i + " ");
}
}
}
https://stackoverflow.com/questions/48732440
复制相似问题