目录
二维数组中的查找
牛客链接
public boolean Find(int target, int [][] array) {
int i=0;
int j=array[0].length-1;
while(j>=0 && i<array.length){
if(array[i][j]<target){
i++;
}else if(array[i][j]>target){
j--;
}else{
return true;
}
}
return false;
}
调整数组顺序使奇数位于偶数前面
牛客链接
相对位置改变的情况
int i=0;
int j=array.length-1;
while(i<j) {
while(i<j && array[i]%2!=0) {
i++;
}
while(i<j && array[j]%2==0) {
j--;
}
int tmp=array[i];
array[i]=array[j];
array[j]=tmp;
相对位置不改变的情况
public void reOrderArray(int [] array) {
int k=0;
for(int i=0;i<array.length;i++){
if(array[i]%2!=0){//说明是奇数
int tmp=array[i];//将奇数保存到tmp中
int j=i;
while(j>k){
array[j]=array[j-1];//移动元素
j--;
}
array[k]=tmp;
k++;
}
}
}
旋转数组的最小数字
牛客链接
方法一
public int minNumberInRotateArray(int [] array) {
int min=array[0];
for(int i=1;i<array.length;i++){
if(min>array[i]){
min=array[i];
}
}
return min;
}
方法二
public int minNumberInRotateArray(int [] array) {
if(array==null || array.length==0){
return 0;
}
int left=0;
int right=array.length-1;
int mid=0;
while(array[left] >= array[right]){
if(right-left==1){
mid=right;
break;
}
if(array[left]==array[right] && array[left]==array[mid]){
int ret=array[left];
for(int i=left+1;i<right;i++){
if(ret > array[i]){
ret=array[i];
}
}
return ret;
}
mid=(right+left)/2;
if(array[mid] >= array[left]){
left=mid;//最小值在右边
}else{
right=mid;//最小值在左边
}
}
return array[mid];
}