我正在尝试解决问题:
编写一种高效的算法,在m x n矩阵中搜索值。该矩阵具有以下属性:
每行中的整数从左到右排序。 每行的第一个整数大于前一行的最后一个整数。
输入: 矩阵=
[
[1、3、5、7],
[10,11,16,20],
[23,30,34,50]
]
target = 3
输出:true
我写的代码是:
library(dplyr)
library(plotly)
##
Produits<-c("Crème de jour","sérum","Crème de nuit","masque","démaquillant à rincer",
"démaquillant sans rincage","lotion","eau florale","huile","produits teintés")
Pourcentages<-c(27.1,14.5,13.8,8.82,7.73,7.24,6.57,5.83,5.65,2.82)
colors<-c("#ff0000","#ff1919","#ff3232","#ff4c4c","#ff6666",
"#ff7f7f","#ff9999","#ffb2b2","#ffcccc","#ffe5e5")
Data<-data.frame(Produits,Pourcentages,colors)
plot_ly(Data, labels = ~Produits, values = ~Pourcentages, type = 'pie', marker = list(colors = ~colors))%>%
layout(title = 'Les pourcentages des types de soins préférés',
xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
showlegend = TRUE)
我遇到此错误:
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length;
int n = matrix[0].length;
int i,j;
for(i = 0; i < m; i++)
{
if(target >= matrix[i][0] && target <= matrix[i][n-1])
{
break;
}
}
for(j = 0; j < n; j++)
{
if(matrix[i][j] == target)
{
return true;
}
}
return false;
}
}
答案 0 :(得分:0)
您的代码没有考虑以下两种情况:
0
,并且访问matrix[0].length
失败。这就是为什么您会得到例外。IndexOutOfBoundsException
,因为i == m
和matrix[i][j] == target
超出了范围。您可以轻松地修复它们:
public static boolean searchMatrix(int[][] matrix, int target) {
// Matrix empty, can not find element
if (matrix.length == 0 || matrix[0].length == 0) {
return false;
}
int m = matrix.length;
int n = matrix[0].length;
// Search row
int targetRow = -1;
for (int i = 0; i < m; i++) {
if (target >= matrix[i][0] && target <= matrix[i][n - 1]) {
targetRow = i;
break;
}
}
// No row found
if (targetRow == -1) {
return false;
}
for (int j = 0; j < n; j++) {
// Target found
if (matrix[targetRow][j] == target) {
return true;
}
}
// Target not inside row
return false;
}
请注意,由于行也进行了排序,因此您可以使用二进制搜索进一步改善搜索范围。您甚至可以隐式地展平整个数组(将所有行展平为一行),然后在所有元素上展开二进制搜索。这将比您的方法更快。
答案 1 :(得分:0)
正如Zabuza指出的那样,您的代码中存在多个错误。
正如rghome指出的那样,您可能不正确地初始化了矩阵。
尝试用这种方式初始化矩阵。然后您的代码将起作用(下面的示例按预期返回true):
int[][] matrix = {{1, 3, 5, 7}, {10, 11, 16, 20}, {23, 30, 34, 50}};
System.out.println(new Solution().searchMatrix(matrix, 3));
然后通过Zabuza的答案来解决您的错误。