给我一个类和一个接口,并要求我实现该接口:
public class Cell {
private int column;
private int row;
public int getColumn(){ return column;}
public void setColumn(int column){this.column = column;}
public int getRow(){return row;}
public void setRow(int row){this.row = row;}
}
public interface ITable {
void set(Cell cell, long value); //sets the value of the cell
long get(Cell cell); //gets the value of the cell
long sum(Cell fromCell, Cell toCell); //adds all the cell values between fromCell to toCell
long avg(Cell fromCell, Cell toCell); //computes average between the values of fromCell to toCell
}
注意:范围[fromCell:toCell]
表示矩形,其fromCell
的左上角和toCell
的右下角。
限制:
最大列数为1000
最大行数为1000
非空单元格的最大数量为1000
这是面试中的问题之一,在面试中或之后我无法解决。我什至要求面试官提供解决方案,但他无法提供。我很好奇看到这个问题的解决方案。
如果A1为1,A2为2,A3为3,则sum(A1,A3)= 6
答案 0 :(得分:0)
问题不是要您将对象添加到单元格中。单元格对象只是保存行和列数据的一种方式。您要检索的所有长值都将存储在您创建的新类中。
例如:
public class MyTable implements ITable {
long[][] table;
public MyTable(int r, int c) {
table = new long[r][c];
}
void set(Cell cell, long value) {
table[cell.getRow()][cell.getColumn()] = value;
}
long get(Cell cell) {
return table[cell.getRow()][cell.getColumn()];
}
long sum(Cell fromCell, Cell toCell) {
long sum = 0;
for(int r = fromCell.getRow(); r <= toCell.getRow(); r++) {
for(int c = fromCell.getColumn(); c <= toCell.getColumn(); c++) {
sum += table[r][c];
}
}
return sum;
}
long avg(Cell fromCell, Cell toCell) {
long num = 0;
long sum = 0;
for(int r = fromCell.getRow(); r <= toCell.getRow(); r++) {
for(int c = fromCell.getColumn(); c <= toCell.getColumn(); c++) {
sum += table[r][c];
num++;
}
}
return sum/num;
}
}