二维数组中的查找(中等)
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
[
[1,2,8,9],
[2,4,9,12],
[4,7,10,13],
[6,8,11,15]
]
给定 target = 7,返回 true。
给定 target = 3,返回 false。
示例1
输入
7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
返回值
true
public class Solution {
public boolean Find(int target, int [][] array) {
int arrayLength = array[0].length;
int heng = 0;
int zong = arrayLength - 1;
while(heng<array.length || zong>=0) {
if(heng>=array.length||zong<0) {
return false;
}
if(target == array[heng][zong]) {
return true;
} else if(target > array[heng][zong]) {
heng++;
} else {
zong--;
}
}
return false;
}
}
旋转数组的最小数字
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
示例1
输入
[3,4,5,1,2]
返回值
1
public class Solution {
public int minNumberInRotateArray(int [] array) {
if(array==null||array.length==0) {
return 0;
}
int len=array.length;
int index1=0;
int index2=len-1;
int indexMid=index1;
while(array[index1]>=array[index2]) {
if(index2-index1==1) {
indexMid=index2;
break;
}
indexMid=(index1+index2)/2;
if(array[indexMid]==array[index1]&&array[indexMid]==array[index2]) {
return MinInOrder(array,index1,index2);
}
if(array[indexMid]>=array[index1]) {
index1=indexMid;
}else if(array[indexMid]<=array[index2]) {
index2=indexMid;
}
}
return array[indexMid];
}
int MinInOrder(int[] array,int index1,int index2) {
int result=array[index1];
for(int i=index1+1;i<=index2;i++) {
if(array[i]<result) {
result=array[i];
}
}
return result;
}
}
调整数组顺序使奇数位于偶数前面
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,
所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。