我想比较数组中的元素。对于每个元素,从左到右开始,找到值大于现有整数(x)的下一个整数(y),然后找到值小于其y(从左到右)整数的下一个第一个整数(z)。如果next greater和smaller不是-1,则打印(y-z)到控制台,否则打印-1。我的代码是这样的。但是我的数组2,4,1,5,6和我的输出-6,-6,-6,-1。或者我的数组4,3,8,2,1,但是我的输出是-1,-1,-1,-2,-1。
在您的解决方案中,我的输入4、6、8、3、2、5、1和输出0、5、-1、-1、4、0、0,但我的输出必须是4:y=8和z=3,所以y-z= 5
对于6:是一样的,对于8,没有更大的值,y=-1,z=-1,所以返回 -1
,对于3:y=5和z=1,因此y-z= 4
返回 4
为了 2
是一样的。因此,对于数组{4,6,8,3,2,5,1},我期望输出{5,5,-1,4,4,-1,-1}。
public static int[] comparator(int[] arr) {
int y = 0;
int z = 0;
int[] answers = new int[arr.length];
for(int i = 0; i<arr.length; i++) {
for(int j = 0; j<arr.length; j++) {
if(arr[i] < arr[j]) {
y = arr[j];
if(y>arr[j]) {
z = arr[j];
break;
}
answers[i] = z-y;
}
else answers[i] = -1;
}
}
return answers;
}
1条答案
按热度按时间a9wyjsp71#
您正在寻找:
对于每个元素,从左到右,
查找值大于现有整数(x)的第一个下一个整数(y)
然后找到下一个值小于其y(从左到右)整数的第一个整数(z)。
如果next greater和smaller不是-1,则打印(y-z)到控制台,否则打印-1。
代码可简化为:
测试和测试: