我正在编写一个函数来检索2d数组中每行的最大值,并返回一个1d数组,其中每个索引都相对于2d数组的列行索引。
例如,如果我有一个二维数组:
{1,2,3}
{4,5,6}
{7,8,9}
它应该返回一个
数组{3,6,9}
到目前为止,这是我的代码:
double[] rowMaxes(double[][] nums) {
double [] count = new double [nums.length];
for(int i = 0; i < count.length; i++){
for(int x = 0; x < nums[0].length; x++){
for(int n = 0; n < nums.length; n++){
if(nums[x][n] > count[i]){
count[i] = nums[x][n];
}
}
}
}
return count;
}
答案 0 :(得分:1)
不需要3个嵌套循环。你只需要两个循环:
for(int i = 0; i < count.length; i++){
for(int x = 0; x < nums[0].length; x++){
if(nums[i][x] > count[i]){
count[i] = nums[i][x];
}
}
}
答案 1 :(得分:0)
在进入循环之前,您应该找到行和列长度。 如果要考虑负数,则首先将max定义为最小负值。 你可以用这个
public static void main(String[] args) {
double count[][] = {{1,2,3,8},{4,6,5,9},{0,8,9,1}};
int r = count.length;
int c= count[0].length;
double out[] = new double[r];
for(int i = 0; i < r; i++){
double max = Integer.MIN_VALUE;
for(int x = 0; x < c; x++){
if(count[i][x] > max)
max = count[i][x];
}
out[i] = max;
}
for(int i=0;i<r;i++)
System.out.println(out[i]);
}
答案 2 :(得分:0)
public static int[] getMaxOfRow(int arr[][]){
int grtr[]=new int[arr.length];
grtr[0]=arr[0][0];
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[0].length;j++){
if(arr[i][j]>grtr[i]){
grtr[i]=arr[i][j];
}
}
}
return grtr;
}
答案 3 :(得分:0)
请注意,如果一行中的所有值都小于零,则代码将无效
当您创建一个新数组时,它将填充默认值 - 它为零
因为您需要在第一个循环count[i] = nums[i][0]
中添加。
像这样的东西
double[] rowMaxes(double[][] nums) {
double[] count = new double[nums.length];
for (int i = 0; i < nums.length; i++) {
count[i] = nums[i][0];
for (int j = 1; j < nums[i].length; j++) {
if (count[i] < nums[i][j]) {
count[i] = nums[i][j];
}
}
}
return count;
}
如果使用Java 8,则可以使用stream和max方法替换内部循环。
for (int i = 0; i < nums.length; i++) {
count[i] = Arrays.stream(nums[i]).max().getAsDouble();
}
答案 4 :(得分:0)
如果您希望将其设为一行,则这是具有任何显式循环的解决方案:
Arrays.stream(nums).mapToInt((row) -> Arrays.stream(row).max().getAsInt()).max().getAsInt()