cuốn sách gpt4 ai đã làm

java - Cách sắp xếp một mảng các phân đoạn (int left, int right) theo thứ tự tăng dần nhưng nếu left(i)=left(i+1) thì sắp xếp nó dựa trên right(i) và right(i+1)

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 04:22:13 27 4
mua khóa gpt4 Nike

Tôi có một lớp Phân đoạn và một mảng các phân đoạn như thế này:

Phân đoạn lớp tĩnh riêng tư {
số int, kiểu;
Phân đoạn(số int, kiểu int) {
this.number = số;
this.type = loại;
}
}

Phân đoạn[] điểm = Phân đoạn mới[n];
điểm={(0,-1),(1,0),(5,1),(6,0),(6,-1),(10,1),(11,0)}

Phần tử bên trái là danh sách các điểm, danh sách bên phải là loại điểm: -1 mở một đoạn, 1 đóng một đoạn và 0 cắt đoạn đó. Như bạn có thể thấy, mảng này đã được sắp xếp theo số lượng, sử dụng mã này (đó là một lựa chọnSắp xếp phù hợp):

maxI tìm chỉ mục của phần tử "số" lớn nhất

riêng tĩnh int maxI(Phân đoạn [] phân đoạn, kích thước int){
int max=0;
cho (int i=0; i< size;i++){
if(segments[i].number > Segments[max].number ){
tối đa=i;
}
}
return max;
}

// Phương thức hoán đổi trao đổi các phần tử của mảng giữa chỉ mục 1 và chỉ mục 2

trao đổi khoảng trống tĩnh riêng tư (Phân đoạn [] phân đoạn, int chỉ mục1, int chỉ mục2) {
int temp1;
int temp2;
temp1 = đoạn[index1].số;
temp2 = phân đoạn[index1].type;
phân đoạn[index1].number=phân đoạn[index2].số;
phân đoạn[index1].type=phân đoạn[index2].type;
phân đoạn[index2].number=temp1;
phân đoạn[index2].type=temp2;
}

selectSort là phương thức sắp xếp (vì Arrays.sort không hoạt động với "phân đoạn")

khoảng trống tĩnh riêng tư selectSort(Segment[] Segment) {
int MaxPos;
for (int i=segments.length-1;i>0;i--){
MaxPos = maxI(đoạn, i+1);
trao đổi (phân đoạn, MaxPos, i);
}
}

Đầu vào ban đầu là 2 phạm vi và 3 điểm giao nhau:

Phạm vi 1: 0 5
Phạm vi 2: 6 10
Điểm giao nhau: 1 6 11

Vậy kết quả sắp xếp như sau:

(0,-1),(1,0),(5,1),(6,0),(6,-1),(10,1),(11,0)

Tôi đã thử sửa đổi phương thức maxI để 6,-1 xuất hiện trước 6,0 (-1 < 0) bằng câu lệnh if thứ hai:

if (phân đoạn[i].số = phân đoạn[max].số && phân đoạn[i].type > phân đoạn[max].type)

Nhưng nó sẽ làm rối đầu ra. Vì đầu vào là ngẫu nhiên nên mã phải được chuẩn bị để sắp xếp nhiều ca kiểm thử bằng nhau về mặt số lượng.

Câu hỏi gần nhất tôi từng thấy về chủ đề này là một cái được tạo bằng C++ , Tôi mới học Java nên tôi đang rất cố gắng để hiểu C++. Tôi cảm thấy như câu trả lời đã gần, nhưng không chắc mình đang thiếu gì. Có lẽ tôi đang sử dụng cấu trúc dữ liệu sai. Sau đó, tôi chỉ lặp lại mảng, cộng tổng của loại, vì vậy nếu một số đi qua 3 phạm vi mở (x, -1), thì nó là -3, ở mức tuyệt đối = 3 nên nó giao nhau với 3 phạm vi, đó là những gì tôi sẽ cần câu trả lời.

câu trả lời hay nhất

Chỉ cần tạo mộtBộ so sánh để so sánhnumber, rồi so sánhkiểu, sau đó bạn có thể sử dụngMảng.sort() .Nếu bạn có Java 8, bạn có thể thực hiện việc này:

Arrays.sort(điểm, Comparator.comparingInt((Segment s) -> s.number).thenComparingInt((Segment s) -> s.type));

Nếu bạn đang sử dụng Java 7, bạn có thể làm điều này:

Arrays.sort(point, new Comparator() {
@Ghi đè
public int so sánh(Đoạn s1, Đoạn s2) {
int result = Integer.compare(s1.number, s2.number);
nếu (kết quả == 0) {
result = Integer.compare(s1.type, s2.type);
}
return result;
}
});

Ngoài ra, bạn có thể có Phân đoạn 实现 Có thể so sánh giao diện,Mảng.sort(điểm) Sẽ hoạt động tốt:

Lớp tĩnh riêng tư Phân đoạn thực hiện Comparable {
số int, kiểu;
Phân đoạn(số int, kiểu int) {
this.number = số;
this.type = loại;
}

@Ghi đè
int công khai so sánhTo(Đoạn s) {
int result = Integer.compare(this.number, s.number);
nếu (kết quả == 0) {
result = Integer.compare(this.type, s.type);
}
return result;
}
}

Giới thiệu về java - Cách sắp xếp một mảng các phân đoạn (int left, int right) theo thứ tự tăng dần nhưng nếu left(i)=left(i+1) thì sắp xếp dựa trên right(i) và right(i+1), Chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/38135702/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress