程序员社区

数组(算法题)(2)

   // 用递归求数组中最大的元素
    public static int max(int a, int b) {
        return a > b ? a : b;
    }

    public static int maxnum(int a[], int begin) {
        int length = a.length - begin;
        if (length == 1) {
            return a[begin];
        } else {
            return max(a[begin], a[begin + 1]);
        }
    }

    public static void main(String[] args) {
        int a[] = { 0, 16, 2, 3, 4, 5, 10, 7, 8, 9 };
        System.out.println(maxnum(a, 0));
    }
   //数组中一个数减去它右边子数组中的第一个数字可以得到的差值,求最大值
    @Test
    public void getMax() {
        int a[] = {1,4,17,3,2,9};
        int len = a.length;
        int diff[] = new int [len];
        int max[] = new int [len];
        diff[0] =Integer.MIN_VALUE;
        max[0] = a[0];
        int i =1;
        for(;i<len;i++){
            diff[i] = diff[i-1]>max[i-1]-a[i]?diff[i-1]:max[i-1]-a[i];
            max[i] = max[i-1]>a[i]?max[i-1]:a[i];
        }
        System.out.println(Arrays.toString(a));
        System.out.println(diff[i-1]);
    }

}
   //求数组中元素的最小距离 假设找 4,8
    @Test
    public void minDistance() {
        int a[] = {4,5,6,4,7,4,6,4,7,8,5,6,4,3,10,8};
        int n1_index = Integer.MAX_VALUE;
        int n2_index = Integer.MAX_VALUE;
        int min = Integer.MAX_VALUE;
        for(int i = 0;i<a.length;i++){
            if(a[i]==4){
                n1_index = i;
                min = min<Math.abs(n1_index-n2_index)?min:Math.abs(n1_index-n2_index);
            }
            if(a[i] == 8){
                n2_index = i;
                min = min<Math.abs(n1_index-n2_index)?min:Math.abs(n1_index-n2_index);
            }

        }
        System.out.println(min);
    }
   //对数组的俩个子有序数段进行排序
    @Test
    public void merge() {
        int a[] = {1,5,6,7,9,2,4,8,10,13,14};
        int mid = 0;
        for(int i = 0;i<a.length;i++){
            if(a[i+1]<a[i]){
                mid = i+1;
                break;
            }
        } 
        for(int i = 0;i<mid;i++){
            if(a[i]>a[mid]){
                int temp = a[i];
                a[i] = a[mid];
                a[mid] = temp;
            }else if(a[i+1]<a[mid]){
                int temp = a[i+1];
                a[i+1] = a[mid];
                a[mid] = temp;
            }
             for(int j = mid;j<a.length-1;j++){
                 if(a[j]>a[j+1]){
                     int temp = a[j+1];
                        a[j+1] = a[j];
                        a[j] = temp;
                        break;
                 }

             }
        }
        System.out.println(Arrays.toString(a));
    }
   //求数组的交集
    @Test
    public void intersection() {
        int a[] = {0,1,2,3,4};
        int b[] = {1,3,5,7,9};
        int i=0;
        int j=0;
        ArrayList<Integer> arrayList = new ArrayList<>();

        while (true) {
            if(a[i]==b[j]){
                arrayList.add(a[i]);
                i++;
                j++;

            }else if(a[i]>b[j]){
                j++;
            }else{
                i++;
            }
            if(i==a.length||j==b.length){
                break;          }
        }
        System.out.println(arrayList.toString());
    }

[1, 3]

 

赞(0) 打赏
未经允许不得转载:IDEA激活码 » 数组(算法题)(2)

一个分享Java & Python知识的社区