Java语言中的可比单调函数

Java语言中的可比单调函数,java,arrays,generics,java-8,Java,Arrays,Generics,Java 8,我正在尝试实现一个算法,该算法检查可比较元素的数组是增加还是减少。到目前为止,我已经写了这个方法: class Solution { public boolean isMonotonic(int[] A) { int store = 0; for (int i = 0; i < A.length - 1; ++i) { int c = Integer.compare(A[i], A[i+1]); if

我正在尝试实现一个算法,该算法检查可比较元素的数组是增加还是减少。到目前为止,我已经写了这个方法:

class Solution {
    public boolean isMonotonic(int[] A) {
        int store = 0;
        for (int i = 0; i < A.length - 1; ++i) {
            int c = Integer.compare(A[i], A[i+1]);
            if (c != 0) {
                if (c != store && store != 0)
                    return false;
                store = c;
            }
        }

        return true;
    }
}

为了使方法采用泛型参数,请更改其标题:

public static <T extends Comparable<? super T>> boolean isMonotonic(T[] A)

为了使方法采用泛型参数,请更改其标题:

public static <T extends Comparable<? super T>> boolean isMonotonic(T[] A)

严格单调函数:

public static boolean isMonotone(int[] a) {
    boolean monotone = true;
    if(a[0]>a[1]) {
        for(int i=0;i<(a.length-1);i++) {
            if(!(a[i]>a[i+1])){
                monotone=false;
            }
        }
    }
    if(a[0]<a[1]) {
        for(int i=0;i<(a.length-1);i++) {
            if(!(a[i]<a[i+1])){
                monotone=false;
            }
        }
    }
    if(a[0]==a[1]) return false;
    return monotone;
    
}
public static boolean isMonotone(int[] a) {
    boolean monotone = true;
    int i=0;
    while(a[i]==a[i+1]) {
        i++;
    }
    if(a[i]>a[i+1]) {
        for(int j=0;j<(a.length-1);j++) {
            if(!(a[j]>=a[j+1])){
                monotone=false;
            }
        }
    }
    if(a[i]<a[i+1]) {
        for(int j=0;j<(a.length-1);j++) {
            if(!(a[j]<=a[j+1])){
                monotone=false;
            }
        }
    }
    return monotone;
}

严格单调函数:

public static boolean isMonotone(int[] a) {
    boolean monotone = true;
    if(a[0]>a[1]) {
        for(int i=0;i<(a.length-1);i++) {
            if(!(a[i]>a[i+1])){
                monotone=false;
            }
        }
    }
    if(a[0]<a[1]) {
        for(int i=0;i<(a.length-1);i++) {
            if(!(a[i]<a[i+1])){
                monotone=false;
            }
        }
    }
    if(a[0]==a[1]) return false;
    return monotone;
    
}
public static boolean isMonotone(int[] a) {
    boolean monotone = true;
    int i=0;
    while(a[i]==a[i+1]) {
        i++;
    }
    if(a[i]>a[i+1]) {
        for(int j=0;j<(a.length-1);j++) {
            if(!(a[j]>=a[j+1])){
                monotone=false;
            }
        }
    }
    if(a[i]<a[i+1]) {
        for(int j=0;j<(a.length-1);j++) {
            if(!(a[j]<=a[j+1])){
                monotone=false;
            }
        }
    }
    return monotone;
}
单调函数:

public static boolean isMonotone(int[] a) {
    boolean monotone = true;
    if(a[0]>a[1]) {
        for(int i=0;i<(a.length-1);i++) {
            if(!(a[i]>a[i+1])){
                monotone=false;
            }
        }
    }
    if(a[0]<a[1]) {
        for(int i=0;i<(a.length-1);i++) {
            if(!(a[i]<a[i+1])){
                monotone=false;
            }
        }
    }
    if(a[0]==a[1]) return false;
    return monotone;
    
}
public static boolean isMonotone(int[] a) {
    boolean monotone = true;
    int i=0;
    while(a[i]==a[i+1]) {
        i++;
    }
    if(a[i]>a[i+1]) {
        for(int j=0;j<(a.length-1);j++) {
            if(!(a[j]>=a[j+1])){
                monotone=false;
            }
        }
    }
    if(a[i]<a[i+1]) {
        for(int j=0;j<(a.length-1);j++) {
            if(!(a[j]<=a[j+1])){
                monotone=false;
            }
        }
    }
    return monotone;
}
单调函数:

public static boolean isMonotone(int[] a) {
    boolean monotone = true;
    if(a[0]>a[1]) {
        for(int i=0;i<(a.length-1);i++) {
            if(!(a[i]>a[i+1])){
                monotone=false;
            }
        }
    }
    if(a[0]<a[1]) {
        for(int i=0;i<(a.length-1);i++) {
            if(!(a[i]<a[i+1])){
                monotone=false;
            }
        }
    }
    if(a[0]==a[1]) return false;
    return monotone;
    
}
public static boolean isMonotone(int[] a) {
    boolean monotone = true;
    int i=0;
    while(a[i]==a[i+1]) {
        i++;
    }
    if(a[i]>a[i+1]) {
        for(int j=0;j<(a.length-1);j++) {
            if(!(a[j]>=a[j+1])){
                monotone=false;
            }
        }
    }
    if(a[i]<a[i+1]) {
        for(int j=0;j<(a.length-1);j++) {
            if(!(a[j]<=a[j+1])){
                monotone=false;
            }
        }
    }
    return monotone;
}

不要将泛型与数组混用。泛型是不变的并被擦除,而数组是协变的并被保留。这是制造麻烦的方法。您可以使用列表吗?您没有显示任何有问题的代码,对吗?这里没有泛型,没有可比性,什么是可比性?@Turing85我正在学习算法设计手册,这本书中有一个挑战,需要我使用arrays@luk2302我首先为一个int数组编写了这个代码,但我现在正试图找到一个解决方案,使用一个用于共享的感谢数组,非常有用!不要将泛型与数组混用。泛型是不变的并被擦除,而数组是协变的并被保留。这是制造麻烦的方法。您可以使用列表吗?您没有显示任何有问题的代码,对吗?这里没有泛型,没有可比性,什么是可比性?@Turing85我正在学习算法设计手册,这本书中有一个挑战,需要我使用arrays@luk2302我首先为一个int数组编写了这个代码,但我现在正试图找到一个解决方案,使用一个用于共享的感谢数组,非常有用!这个密码伤了我的眼睛。请仔细阅读使用早期输出循环代码。我刚刚做了一些更改。过来看!这个密码伤了我的眼睛。请仔细阅读使用早期输出循环代码。我刚刚做了一些更改。过来看!