【发布时间】:2021-11-12 10:35:05
【问题描述】:
给定一个 n x m 维的布尔二维数组,其中每一行都进行了排序。找出第一行中 1 数量最多的从 0 开始的索引。
下面是我写的代码
int rowWithMax1s(int arr[][], int n, int m) {
int ans = -1;
int row = 0;
int col = m-1;
while(row<n && col>=0){
if(arr[row][col] == 1){
col--;
ans = row;
}
else{
row++;
}
}
return ans;
}
我相信上述的时间复杂度是 O(M+N)。然而它给我的时间限制超出了错误。
这是问题的链接 https://practice.geeksforgeeks.org/problems/row-with-max-1s0023/1#
请帮助我,我还能做些什么来优化我的代码。
【问题讨论】:
-
二分查找方法的时间复杂度为 O(Mlog(N))。大于 O(M+N)
-
矩阵只包含 0 和 1,每一行都已排序。
-
如果矩阵全为 0,您似乎返回了错误的答案,但该代码不应 TLE。
-
@MattTimmermans -1 结果是任务想要的结果。我认为这会得到 TLE,因为驱动程序代码构建了整个矩阵(单击代码的第 1 行查看它)。
标签: arrays algorithm matrix optimization