- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 Segment 类和一个这样的段数组:
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)}
左边的元素是一个点的列表,右边的列表是点的类型:-1打开一个线段,1关闭一个线段,0与线段相交。正如您所看到的,这个数组已经根据数字排序,使用这个代码(它是一个改编的 selectionSort):
maxI 找到最大“数”元素的索引
private static int maxI(Segment[] segments, int size){
int max=0;
for (int i=0; i< size;i++){
if(segments[i].number > segments[max].number ){
max=i;
}
}
return max;
}
//swap 方法在 index1 和 index2 之间交换数组的元素
private static void swap(Segment[] segments, int index1, int index2){
int temp1;
int temp2;
temp1 = segments[index1].number;
temp2 = segments[index1].type;
segments[index1].number=segments[index2].number;
segments[index1].type=segments[index2].type;
segments[index2].number=temp1;
segments[index2].type=temp2;
}
selectSort 是排序方法(因为 Arrays.sort 不适用于“段”)
private static void selectSort(Segment[] segments) {
int MaxPos;
for (int i=segments.length-1;i>0;i--){
MaxPos = maxI(segments, i+1);
swap (segments, MaxPos, i);
}
}
原始输入是 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 方法,所以 6,-1 使用第二个 if 语句出现在 6,0 (-1 < 0) 之前:
if (segments[i].number = segments[max].number && segments[i].type > segments[max].type)
但它会弄乱输出。由于输入是随机的,因此必须准备代码来对许多数字相等的测试用例进行排序。
我见过的与此主题最接近的问题是 one made in C++ ,我只是在学习 Java,所以我很努力地尝试理解 C++。我觉得答案很接近,但不确定我错过了什么。也许我使用了错误的数据结构。在这之后我只是遍历数组,添加类型的总和,所以如果一个数字通过 3 个范围的开放(x,-1),它是 -3,在 absolute= 3 所以它与 3 个范围相交,这就是我的答案会需要的。
最佳答案
只需创建一个Comparator
来比较number
,然后比较type
,然后您就可以使用Arrays.sort()
.如果你有 Java 8,你可以这样做:
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;
}
});
或者,您可以让 Segment
实现 Comparable
接口(interface),Arrays.sort(points)
将开箱即用:
private static class Segment implements Comparable<Segment> {
int number, type;
Segment(int number, int type) {
this.number = number;
this.type = type;
}
@Override
public int compareTo(Segment s) {
int result = Integer.compare(this.number, s.number);
if (result == 0) {
result = Integer.compare(this.type, s.type);
}
return result;
}
}
关于java - 如何按升序对段数组 (int left, int right) 进行排序,但如果 left(i)=left(i+1) 则根据 right(i) 和 right(i+1) 对其进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38135702/
IE 似乎在来自未压缩的 raphaeljs 1.4.7 的以下第 2207 行(当然,在我的代码的上下文中): gs.left != (t = left + "px") && (gs.left =
这是在操纵 $("#mydiv").position().left 还是 $("#mydiv").offset().left? $("#mydiv").animate({"left":"-100"},
这个问题在这里已经有了答案: why left+(right-left)/2 will not overflow? (7 个答案) 关闭 1 年前。 在二分搜索 while 循环中: left, r
这个问题在这里已经有了答案: why left+(right-left)/2 will not overflow? (7 个答案) 关闭 1 年前。 在二分搜索 while 循环中: left, r
我有一个 Segment 类和一个这样的段数组: private static class Segment { int number, type; Segment(in
我有一个查询,它在子选择上执行 LEFT JOIN。此查询在高负载环境中运行,并在设定的要求内执行。查询(高度简化)如下所示: SELECT table_A.pKey , table_A.uKey
我在 SO 中看到一些创建 multilanguage websites in JavaScript 的好建议包括 this article on JavaScript internationaliz
我已经使用它年了,所以是时候全面了解它了。假设这样的查询: SELECT * FROM a LEFT JOIN b ON foo... LEFT JOIN c ON bar... document
我正在尝试对搜索框执行以下 MySql 查询。我试图返回“专辑”信息(标题等),同时包含该专辑中第一张图片的缩略图。但是,我必须查找两个表才能获取图像信息。首先,photos_albums包含该相册中
我有 2 个表,我想 LEFT JOIN 并过滤 LEFT 表上的结果。这些表是: -product_table,包含列 id 和 product_name -order_table,包含列 id、p
我理解 Left Join 应该做什么吗? 我有一个问题。将其称为查询 A。它返回 19 条记录。 我有另一个查询,查询 B。它返回 1,400 条记录。 我将查询 B 作为左连接插入到查询 A 中,
我正在使用 left: auto;希望重写left: 0;但它不起作用(请参阅 jsfiddle )-我想要 居中对齐。 HTML:
为什么这不起作用?我已经分配了一堆带有 float:left 的 div,并希望设置第一个元素的位置,然后用它更新所有 sibling 的位置。 例如,我将第一个元素的 css 设置为 left:50
这应该是非常基本的 CSS,但无论我尝试什么,该死的 div 就是不会去它应该去的地方! 这是 HTML: Registe-se Nome:
我在一个 div 中嵌套了一个 div。我正在尝试显示一些文本并且有效。然而,我想要的是文本居中对齐,即它有一个 left: -50%。但它什么都不做。但是当我执行类似 left: 20px 的操作时
我有一个包含跟踪数据的表格。在其他值中,该表具有列 traffic_medium、traffic_source 和 traffic_campaign。这些列有时确实包含 (none) 或 null 作
我正在尝试 中的代码。 在 GHC 版本 6.10.4 上: data ParseState = ParseState { string :: String } deriving (Show) n
我在使用用于显示自定义配置文件字段和任何(可选)对应值的 SQL 查询时遇到问题。 这是我正在使用的 SQL 查询: SELECT pf.`id`, pf.`name`, pv.`value` FRO
我目前制作了一个包含侧边栏和内容的容器,但是当我向侧边栏添加的文本多于向容器添加的文本时,第二个侧边栏会稍微 float 到一边。这些是我正在使用的代码。 HTML: Pl
这个问题在这里已经有了答案: Difference between margin and padding? (25 个答案) 关闭 5 年前。
我是一名优秀的程序员,十分优秀!