private boolean compressRow(int[] row) {
        int[] newRow = new int[row.length];
        int newCount = 0;
        int count = 0;
        boolean res = false;
        for (int element:row){
            if (element>0) {
                newRow[newCount] = row[count];
                newCount++;
                count++;
            } else {
                count++;
            }
        }
        for (int i=0;i<row.length;i++){
            if (row[i]!=newRow[i]) res = true;
            //row[i] = newRow[i];
        }
        row = newRow;
        return res;
    }
Если же сделать присваивание в цикле. то решение принимается. Специально продебажил несколько вариантов, они корректно присваивают row новое значение.