Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何按升序对段数组(int left,int right)排序,但如果left(i)=left(i+;1)则根据right(i)和right(i+;1)对其排序_Java_Algorithm_Sorting_Data Structures - Fatal编程技术网

Java 如何按升序对段数组(int left,int right)排序,但如果left(i)=left(i+;1)则根据right(i)和right(i+;1)对其排序

Java 如何按升序对段数组(int left,int right)排序,但如果left(i)=left(i+;1)则根据right(i)和right(i+;1)对其排序,java,algorithm,sorting,data-structures,Java,Algorithm,Sorting,Data Structures,我有一个类段和一组段,如下所示: private static class Segment { int number, type; Segment(int number, int type) { this.number = number; this.type = type; } } Segment[] points = new Segment[n]; points={(0,-1),(1,0),(5,

我有一个类段和一组段,如下所示:

private static class Segment {
        int number, type;
        Segment(int number, int type) {
            this.number = number;
            this.type = type;
        }
}

Segment[] points = new Segment[n];
points={(0,-1),(1,0),(5,1),(6,0),(6,-1),(10,1),(11,0)}
Arrays.sort(points, Comparator.comparingInt((Segment s) -> s.number).thenComparingInt((Segment s) -> s.type));
左侧的元素是点列表,右侧的列表是点的类型:-1打开一段,1关闭一段,0与该段相交。 正如您所看到的,这个数组已经使用以下代码按照数字进行了排序(这是一个经过调整的selectionSort):

maxI查找最大“number”元素的索引

selectSort是排序方法(因为Arrays.sort不能与“segments”一起使用)

原始输入为2个范围和3个交点:

Range 1: 0 5
Range 2: 6 10
Intersection points: 1 6 11
因此,排序后的结果如下:

(0,-1),(1,0),(5,1),(6,0),(6,-1),(10,1),(11,0)
我试图修改maxI方法,因此使用第二个if语句将6,-1置于6,0(-1<0)之前:

if (segments[i].number = segments[max].number && segments[i].type > segments[max].type)
由于输入是随机的,所以代码必须准备好对多个数字相等的测试用例进行排序

<> P>我在这个问题上看到的最接近的问题是,我只是学习java,所以我在努力去理解C++。我觉得答案很接近,但不确定我遗漏了什么。也许我使用了错误的数据结构。
在这之后,我只需遍历数组,添加类型之和,因此如果一个数字通过3个范围的开头(x,-1),那么它是-3,绝对值=3,因此它与3个范围相交,这就是我需要的答案。

只需创建一个比较器来比较
数字
,然后
类型
,然后就可以使用
数组。sort()
。如果您有Java 8,您可以这样做:

private static class Segment {
        int number, type;
        Segment(int number, int type) {
            this.number = number;
            this.type = type;
        }
}

Segment[] points = new Segment[n];
points={(0,-1),(1,0),(5,1),(6,0),(6,-1),(10,1),(11,0)}
Arrays.sort(points, Comparator.comparingInt((Segment s) -> s.number).thenComparingInt((Segment s) -> s.type));
如果您使用的是Java 7,则可以执行以下操作:

Arrays.sort(points, new Comparator<Segment>() {
    @Override
    public int compare(Segment s1, Segment s2) {
        int result = Integer.compare(s1.number, s2.number);
        if (result == 0) {
            result = Integer.compare(s1.type, s2.type);
        }
        return result;
    }
});

只需创建一个比较
数字的
比较器
,然后
键入
,然后就可以使用
数组.sort()
。如果您有Java 8,您可以这样做:

private static class Segment {
        int number, type;
        Segment(int number, int type) {
            this.number = number;
            this.type = type;
        }
}

Segment[] points = new Segment[n];
points={(0,-1),(1,0),(5,1),(6,0),(6,-1),(10,1),(11,0)}
Arrays.sort(points, Comparator.comparingInt((Segment s) -> s.number).thenComparingInt((Segment s) -> s.type));
如果您使用的是Java 7,则可以执行以下操作:

Arrays.sort(points, new Comparator<Segment>() {
    @Override
    public int compare(Segment s1, Segment s2) {
        int result = Integer.compare(s1.number, s2.number);
        if (result == 0) {
            result = Integer.compare(s1.type, s2.type);
        }
        return result;
    }
});

出于好奇。自从你开始使用Java以来,你有多少时间了?@Nooblhu如果你问我使用Java有多长时间了,大概有4年了。出于好奇。自从你开始使用Java以来,你已经有多少时间了?@Nooblhu如果你问我使用Java有多长时间了,大概有4年了。