Giới thiệu:
Lấy cảm hứng từ hai câu hỏi SO này (không nghi ngờ gì từ cùng một lớp): in các phần tử trong tập con của tổng tối đa mà không có phần tử liền kề java và Tổng tối đa của các phần tử không liền kề của một mảng, sẽ được in .
Thử thách:
Đưa ra một danh sách các số nguyên, xuất ra một chuỗi con gồm các phần tử không liền kề có tổng cao nhất. Dưới đây là một số ví dụ:
[1,2,3,-1,-3,2,5]
sẽ dẫn đến[1,3,5]
(với một tổng số9
) tại các chỉ số dựa trên 0[0,2,6]
.[4,5,4,3]
sẽ dẫn đến một trong hai[4,4]
(với một tổng số8
) tại các chỉ số dựa trên 0[0,2]
hoặc[5,3]
(cũng với một tổng số8
) tại các chỉ số dựa trên 0[1,3]
.[5,5,10,100,10,5]
sẽ dẫn đến[5,100,5]
(với một tổng số110
) tại các chỉ số dựa trên 0[0,3,5]
hoặc[1,3,5]
.
Điều quan trọng nhất về các ví dụ trên, các chỉ số chứa các phần tử cách nhau ít nhất 2. Nếu chúng ta xem xét ví dụ [5,5,10,100,10,5]
sâu hơn: chúng ta có các chuỗi con tiềm năng sau có chứa các mục không liền kề; với các chỉ số của họ bên dưới nó; với số tiền của họ dưới đây:
[[5],[10],[100],[10],[5],[5],[100,5],[10,5],[10,10],[5,5],[5,10],[5,100],[5,5],[5,10],[5,100],[5,10],[5,100,5],[5,100,5],[5,10,5],[5,10,10]] // non-adjacent subsequences
[[5],[ 4],[ 3],[ 2],[1],[0],[ 3,5],[ 2,5],[ 2, 4],[1,5],[1, 4],[1, 3],[0,5],[0, 4],[0, 3],[0, 2],[1, 3,5],[0, 3,5],[0, 2,5],[0, 2, 4]] // at these 0-based indices
[ 5, 10, 100, 10, 5, 5, 105, 15, 20, 10, 15, 105, 10, 15, 105, 15, 110, 110, 20, 25] // with these sums
^ ^ // and these two maximums
Vì tổng số tiền tối đa là 110
, chúng tôi xuất [5,100,5]
kết quả.
Quy tắc thử thách:
- Bạn được phép xuất các cặp khóa-giá trị của chỉ số + giá trị. Vì vậy, thay vì
[5,100,5]
bạn có thể xuất[[0,5],[3,100],[5,5]]
hoặc[[1,5],[3,100],[5,5]]
kết quả (hoặc[[1,5],[4,100],[6,5]]
/[[2,5],[4,100],[6,5]]
khi lập chỉ mục dựa trên 1 được sử dụng thay vì dựa trên 0).- Nếu bạn sử dụng các cặp khóa-giá trị, chúng cũng có thể theo thứ tự ngược hoặc ngẫu nhiên, vì rõ ràng giá trị nào có nghĩa là do chỉ số được ghép nối.
- Chỉ xuất ra các chỉ số không có giá trị. Nó sẽ xuất các giá trị hoặc các giá trị / chỉ mục dưới dạng cặp khóa-giá trị (hoặc hai danh sách riêng biệt cho 'khóa' và 'giá trị' có cùng kích thước nếu không thể sử dụng cặp giá trị khóa trong ngôn ngữ bạn chọn).
- Bạn được phép xuất tất cả các chuỗi con có thể với tổng tối đa thay vì chỉ một.
- Như bạn có thể thấy từ các ví dụ, danh sách đầu vào cũng có thể chứa các giá trị âm và trùng lặp. Bạn có thể giả sử các số nguyên đầu vào nằm trong phạm vi .
- Danh sách đầu ra không thể để trống và phải luôn chứa ít nhất một phần tử (nếu danh sách chỉ chứa giá trị âm, danh sách chứa giá trị âm thấp nhất sẽ là kết quả đầu ra - xem hai trường hợp kiểm tra cuối cùng).
- Nếu có một đầu ra có thể nhưng đối với nhiều chỉ số khác nhau, nó được phép xuất cả hai đầu ra mặc dù chúng có thể trông trùng lặp. (tức là ví dụ trên, có thể xuất ra
[[5,100,5],[5,100,5]]
cho cả hai kết hợp chỉ mục có thể).
Các trường hợp thử nghiệm:
Input: Possible outputs: At 0-based indices: With sum:
[1,2,3,-1,-3,2,5] [1,3,5] [0,2,6] 9
[4,5,4,3] [4,4]/[5,3] [0,2]/[1,3] 8
[5,5,10,100,10,5] [5,100,5] [0,3,5]/[1,3,5] 110
[10] [10] [0] 10
[1,1,1] [1,1] [0,2] 2
[-3,7,4,-2,4] [7,4] [1,4] 11
[1,7,4,-2] [7] [1] 7
[1,2,-3,-4,5,6,-7] [2,6] [1,5] 8
[800,-31,0,0,421,726] [800,726]/[800,0,726] [0,5]/[0,3,5]/[0,2,5] 1526
[-1,7,8,-5,40,40] [8,40] [2,4]/[2,5] 48
[-5,-18,-3,-1,-10] [-1] [3] -1
[0,-3,-41,0,-99,-2,0] [0]/[0,0]/[0,0,0] [0]/[3]/[6]/[0,3]/
[0,6],[3,6]/[0,3,6] 0
powerset
là một tập hợp các tập hợp con phải không? Nhưng có vẻ như bạn đang trả lại một tập hợp các thứ tự? [4,5,4,3] sẽ dẫn đến [4,4] trong đó [4,4] rõ ràng không phải là một tập hợp.
[5,100,5]
hai lần cho ví dụ thứ ba của bạn.