题解 | #二维数组中的查找#
二维数组中的查找
https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e
using System;
using System.Collections.Generic;
class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param target int整型
* @param array int整型二维数组
* @return bool布尔型
*/
public bool Find (int target, List<List<int>> array) {
/*
思路:一维数据的扩展,与一维数组相比,多了上下两个比较的维度。
*/
if (array == null || array.Count == 0 || array[0].Count == 0)
return false;
Range range = new Range();
range.downIndex = array.Count - 1;
range.upIndex = 0;
range.LeftIndex = 0;
range.RightIndex = array[0].Count - 1;
return this.Find(target, array, range);
}
private bool Find(int target, List<List<int>> array, Range range) {
int middleIndex_H = (range.LeftIndex + range.RightIndex) / 2;
int middleIndex_V = (range.upIndex + range.downIndex) / 2;
int middleValue = array[middleIndex_V][middleIndex_H];
if (middleValue == target)
return true;
if (middleIndex_H == range.LeftIndex && middleIndex_V == range.upIndex) {
if(target == array[range.upIndex][range.RightIndex])
return true;
else if(target == array[range.downIndex][range.LeftIndex])
return true;
else if(target == array[range.downIndex][range.RightIndex])
return true;
else
return false;
}
if (middleValue > target) {
Range tempRange = new Range();
tempRange.downIndex = middleIndex_V;
tempRange.RightIndex = middleIndex_H;
tempRange.LeftIndex = range.LeftIndex;
tempRange.upIndex = range.upIndex;
bool tempResult = this.Find(target, array, tempRange);
if (!tempResult) {
tempRange.LeftIndex = middleIndex_H;
tempRange.RightIndex = range.RightIndex;
tempResult = this.Find(target, array, tempRange);
}
if (!tempResult) {
tempRange.LeftIndex = range.LeftIndex;
tempRange.RightIndex = middleIndex_H;
tempRange.upIndex = middleIndex_V;
tempRange.downIndex = range.downIndex;
tempResult = this.Find(target, array, tempRange);
}
return tempResult;
} else {
Range tempRange = new Range();
tempRange.upIndex = middleIndex_V;
tempRange.LeftIndex = middleIndex_H;
tempRange.RightIndex = range.RightIndex;
tempRange.downIndex = range.downIndex;
bool tempResult = this.Find(target, array, tempRange);
if (!tempResult) {
tempRange.upIndex = range.upIndex;
tempRange.downIndex = middleIndex_V;
tempResult = this.Find(target, array, tempRange);
}
if (!tempResult) {
tempRange.LeftIndex = range.LeftIndex;
tempRange.RightIndex = middleIndex_H;
tempRange.upIndex = middleIndex_V;
tempRange.downIndex = range.downIndex;
tempResult = this.Find(target, array, tempRange);
}
return tempResult;
}
}
private class Range {
public int LeftIndex {
get;
set;
}
public int RightIndex {
get;
set;
}
public int upIndex {
get;
set;
}
public int downIndex {
get;
set;
}
}
}
#算法##算法记录#算法代码编程 文章被收录于专栏
算法代码编程
卓越教育公司福利 134人发布