- 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/
我有一个 Segment 类和一个这样的段数组: private static class Segment { int number, type; Segment(in
我在 SO 中看到一些创建 multilanguage websites in JavaScript 的好建议包括 this article on JavaScript internationaliz
我们有浏览器前缀或黑客 (for Google and Safari) text-align: -webkit-right; (for Firefox) text-align:
过去几天我一直在关注这个问题,我正处于需要寻求帮助的地步。 http://cub.northnodes.com/index.php/about/mission/ 我需要立即捐赠 列一直 float 到
When I press right ctrl, I want the right shift the text will align right. When I press left ctrl le
我已经将右侧的列拆分为顶部和底部。在每个部分中,我在执行以下操作时遇到问题:我希望顶部占据左列高度的 50%,底部占据左列高度的另外 50%。 +-------------------+-------
我知道这个问题的标题很糟糕。对不起。 我有四个 div similar to this .我想要做的只是让 div 编号 2 和 4 之间的垂直空间被删除,而不改变 HTML 的结构。是否可以仅使用
我将表格设置为 100% 宽度。我会添加一个带有 php 的随机 div,有时会充满广告。我希望广告 div 位于表格的右侧和内容。我希望表格位于左侧,但仍为 100% 左右,它将填充广告 div 左
这个问题在这里已经有了答案: Bootstrap align navbar items to the right (24 个答案) 关闭 5 年前。
.floatright { float: right;margin: 0 0 10px 10px;clear: right;width:60px; height:60px; } Lorem
我正在尝试将 td 中的某些内容右对齐。 align="right"有效,但 text-align:right 无效。这是一个 jsfiddle显示这两种情况的示例。除了右对齐右列外,这两种情况是相同
在设计网站时,您认为用于特定任务的最佳图像格式是什么? 在试图找出用于特定任务的格式时,我总是发现自己处于两难境地……例如,我应该全面使用 .jpg 吗?或者,我何时以及为什么应该使用 .png? 例
我是一个 MySQL 新手,今天我尝试设置一个超过 5 行的 MySQL 调用。我不断收到语法错误,我尝试修复了几个小时,但我不知道问题出在哪里。这是代码: USE myDatabase; DELIM
这让我发疯。我有一个 div float 到另一个 div 的右侧,如下所示: Current Membership: 我有以下 css 规则: div#container { f
我有以下代码片段,它会产生不需要的“填充”区域,而填充为零。如何避免这个区域? 代码 div.left { background-color: red; max-width: 25%; f
在 C++ 中,表达式 left() = right() 求值 right() left() 按那个顺序。 right() 先行,正如已讨论过的 here. 我想不出让 right() 先走的理由。你
我有一个很小的菜单列表,当鼠标靠近时它应该会增长。在其原始状态下,菜单是右对齐的,悬停时每第二个元素向右移动并左对齐以为增加的高度腾出空间(参见 JSFiddle )。 ul { font-siz
td.myclass{ width: 6em; text-align: right; padding-right: 2em; } 如您所见,我希望单元格中的文本右对齐,距离单元
你怎么能看到 http://jsfiddle.net/73wst/ 我想在停止下开始,但我不知道如何设置它的样式。 我的 HTML: Stop Start 我的 CSS: .sta
一个大的内部 div 在一个小的外部 div 中,并且外部 div 溢出自动。但是为什么没有内部 div margin-right 和外部 div padding-right? html
我是一名优秀的程序员,十分优秀!