항목 1 : 정렬 2 차원 배열 됨
제목 설명
(동일한 각각의 1 차원 배열의 길이) 위에서 아래로 증가하는 순서로 2 차원 어레이의 각 열에 정렬, 오름차순 정렬의 순서로 좌측에서 우측으로 각각의 행. 완전한 기능, 예컨대 2 차원 어레이와 정수,는 정수 배열을 포함하는지 여부를 판정 입력한다.
사고
A는 생각했다 : 폭력 알고리즘
어레이의 각 요소는, 비교를 통과.
시간 복잡도 : O (N * N);
규칙적인 배열의 조건 : 사용되지
/**
*
* @param target 待查询的目标
* @param array 二维数组
* @return
* 思路:遍历整个二维数组,穷举所有的目标进行比较
* 210ms 16784k
*/
public boolean Find1(int target, int [][] array) {
for(int i=0;i<array.length;i++){//遍历行
for(int j=0;j<array[0].length;j++){//遍历列
if(array[i][j]==target){
return true;
}
}
}
return false;
}
생각이 : 각 행에 대한 이진 검색을 사용하여
데이터의 각 행이 정렬되기 때문에 일차원 배열 순서는,이 광고를 검색 이진 수행하고, 시간 복잡도는 O (log2n) 인
행의 N 연속 사용 이진 탐색 시간의 복잡성은 : O (nlogn)
//193ms
public static boolean Find4(int target,int[][] array){
for(int i=0;i<array.length;i++){//遍历每一行
int left = 0;
int right = array[0].length-1;
int mid = (left+right)/2;
while(left<=right){
mid = (left+right)/2;
if(array[i][mid]>target){//数组中的值比目标值大,则从左半部分再查找
right = mid-1;
}else if(array[i][mid]<target){
left=mid+1;
}else{
return true;//找到
}
}
}
return false;
}
세 가지 아이디어 : 상단 오른쪽 또는 왼쪽 하단 변환에서 비교
매트릭스는 주문한다
보기의 왼쪽 아래 모서리에서 번호를 감소까지 오른쪽 숫자는 증가
당신이 왼쪽 아래보다 큰 디지털 번호를 찾을하려는 경우 따라서, 왼쪽 하단 코너에서 찾고 시작합니다. 오른쪽;
디지털 시간의 왼쪽 하단 모서리보다 숫자를 찾을 때, 위로 이동
왼쪽 하단의 오른쪽 상단에서 차례로 비교
//212ms
public static boolean Find3(int target, int [][] array){
int i=array.length-1; //定义最后一行下标
int j =0;//左下角
while(i>=0 && j<array[0].length) {//
if (array[i][j] > target) {//左下角数字比待比较 数字 大上移
i--;
} else if (array[i][j] < target) {//左下角数字比当前数字小,右移
j++;
} else {
return true;
}
}
return false;
}
폭력 알고리즘 : O (N * N) 210ms
인라인 이진 검색 : O (NLOGN) 193ms
오른쪽 아래 - 왼쪽 : 212ms