0
点赞
收藏
分享

微信扫一扫

算法练习【1】

文风起武 2022-02-20 阅读 112

目录

二维数组中的查找

牛客链接
在这里插入图片描述
在这里插入图片描述

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];
    }
举报

相关推荐

0 条评论