- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Liên kết đến câu hỏi làUVA - 1394 : Và Có Một Người .
Thuật toán đơn giản là quét toàn bộ mảng và đánh dấu phần tử thứ k trong mỗi lần lặp và dừng ở cuối: việc này mất thời gian O(n^2).
Tôi đã tìm kiếm một thuật toán thay thế và tìm thấy blog tiếng trungđiều này cho tôi biếtCây phân đoạnSử dụng phương pháp lan truyền lười biếng làm giải pháp thời gian O(N lgN).
Sau khi xem xét cây phân đoạn, tôi đã cố gắng hình thành một thuật toán trong thời gian O(N lgN), nhưng không có kết quả.
câu trả lời hay nhất
Vâng, bạn có thể.
Bạn có thể xem mô tả cấu trúc dữ liệu bên dưới, ở đây tôi chỉ đưa ra gợi ý về cách sử dụng nó trong vấn đề đã cho. Dân số mà chúng tôi đại diện rõ ràng là một vòng tròn đá. chúng ta bắt đầu từ tất cả N đá bắt đầucòn sống, và tại mỗi bướcgiếtNhững viên đá thích hợp trong cây của chúng ta. Chỉ cần biết chúng ta hiện đang sử dụng phần tử nào (tôi nghĩ gọi nó làmthích hợp hơn). Thuật toán cấp cao (tôi để lại chi tiết cho bạn) như sau (P là cấu trúc dữ liệu của chúng tôi):
Trong khi P.size > 1:
P.toggle(m) // loại bỏ viên đá thứ m
m = P.kth(viên đá tiếp theo bị giết)
P.size trong đoạn mã trên chỉ đơn giản là số lượng tất cả các viên đá còn lại. Trong mô tả sau đây, nó tương ứng với cây [1].
Để ý:Ký hiệu dùng trong cấu trúc dữ liệukvới đầu vào câu hỏi được thể hiện trongKhoảng cách nhảybiểu tượng là khác nhau. p>
hầu hết. Tôi chưa từng thấy cái tên này trước đây nhưng mã này trông giống như những gì tôi đã thấy mọi người nóicây dân sốNhư nhau.
Cây dân số là một cách đơn giản để sử dụng cây phân đoạn. bạn có N phần tử, mỗi phần tử có hai trạng thái có thể có: 1 nghĩa là còn sống, 0 nghĩa là đã chết. Cây hỗ trợ hai thao tác:
Để minh họa thao tác thứ hai, giả sử rằng tập hợp các phần tử sự sống là {1, 2, 4, 7}. nếu như N = 8, tương ứng với mảng trạng thái 01101001 (phần tử 0 đã chết, phần tử 1 còn sống, phần tử 3 còn sống, v.v.).
Vì vậy, làm thế nào để đạt được nó? Như thường lệ, lá của cây tương ứng vớimảng. Tức là nếu phần tử thứ i tồn tại thì giá trị của lá thứ i là 1, ngược lại là 0. Mỗi nút bên trong ghi nhớ tổng giá trị của các nút con của nó.
Để chuyển đổi trạng thái của một phần tử, chúng ta chuyển đổi giá trị của lá tương ứng và sau đó sửa đường dẫn từ lá đó đến gốc:
const int size = 1 << 18; // 2^17 phần tử, phần còn lại là các nút bên trong
int tree[size]; // số phần tử sống trong cây con của một nút
chuyển đổi void(int i) {
tree[i + size / 2] ^= 1; // chuyển đổi lá
cho (i /= 2; i > 0; i /= 2)
cây[i] = cây[2 * i] + cây[2 * i + 1];
}
Để ý:Một cách phổ biến để gắn nhãn các nút là đểgốcbằng 1 thì theo cách đệ quy, nút n Các nút con của là 2n Và 2n+1.
Để tìm thứ k các yếu tố của cuộc sống, chúng ta có thể nghĩ về nó một cách đệ quy: chúng ta hiện đang ở nút n, và đang tìm kiếm thứ k Phần tử sự kiện (cây con của nút là cây có gốc tại nút đó). nếu nhưnđứa con trái 2n有kmột hoặc nhiều yếu tố sống, hãyn = 2n . Nếu không, rõ ràng chúng ta sẽ tìm thấy con chính xác, đó là tập hợp n = 2n+1. Trong trường hợp này, chúng ta không còn tìm kiếm cây con nữa k những yếu tố còn sót lại. Vì chúng ta đã bỏ qua tất cả các phần tử sống của phần tử con bên trái nên chúng ta bắt đầu với k Trừ số này từ . Để đơn giản, chúng ta đang xem xét các yếu tố cuộc sống dựa trên 1 ở đây.
Ý tưởng cơ bản ở đây có lẽ là đệ quy, nhưng mô tả ngụ ý rằng việc thực hiện lặp đi lặp lại cũng phải đơn giản:
int kth(int k) {
++k; // vì phương thức này xem xét các phần tử dựa trên 1
int current_node = 1; // bắt đầu từ gốc
trong khi (current_node < size / 2) {
if (cây[2 * current_node] >= k)
current_node = 2 * current_node; // đi xuống con bên trái;
khác {
k -= cây[2 * current_node] // sửa k
current_node = 2 * current_node + 1; // chuyển xuống con bên phải
}
}
}
Hai chức năng này làmCây phân đoạntrở nêncây dân số.
Đây là câu hỏi về cấu trúc dữ liệu nên các ý tưởng được mô tả đều sử dụng cấu trúc dữ liệu. Tuy nhiên, tôi muốn đề cập rằng câu hỏi này được gọi là Câu hỏi của Josephus, và có một giải pháp thay thế, vì vậy bạn có thể muốn tìm kiếm giải pháp đó.
Về thuật toán - UUV-1394: And There Was One Algorithm, 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/14462401/
LƯU Ý: Đây không phải là hệ thống kiểm soát hàng tồn kho. Tôi chỉ muốn vạch ra loại thuốc nào sẽ dùng cho bệnh nhân nào. Tôi đã không tính đến số lượng bộ dụng cụ y tế, v.v. Chỉ là một sự cố về thuốc và tôi đột nhiên bối rối về các mối quan hệ cơ sở dữ liệu, thậm chí sau nhiều năm làm việc với chúng. Dưới đây là tình huống của tôi. tôi có một cái
Khi gửi một email hàng loạt bằng PHP, tốt hơn là gửi một email cho mỗi người đăng ký (chạy vòng lặp for cho tất cả các địa chỉ email) hay chỉ thêm mọi thứ trong BCC vào danh sách được phân tách bằng dấu phẩy và do đó chỉ gửi một email? Cảm ơn.
Tôi không chắc liệu mình có mô hình hóa loại mối quan hệ này một cách chính xác hay không, có lẽ ai đó có thể cung cấp một số thông tin chi tiết xem liệu điều này có hợp lý hay không: Giả sử chúng ta có một mối quan hệ kiểu cha mẹ và con cái điển hình trong đó mỗi cha mẹ có thể có nhiều con, nhưng chúng ta Cần theo dõi cha mẹ
Tôi có mẫu và phiên bản mẫu. Một mẫu có thể có nhiều phiên bản mẫu, nhưng chỉ có một phiên bản mẫu cho một sự kiện tại bất kỳ thời điểm nào. Tôi có hai mô hình sau: lớp Mẫu 'Tem
Nếu mã của tôi là như thế này: if($seconds < 60) $interval = "$seconds giây trước"; else if($seconds < 3600) $
Khi tôi tạo di chuyển mối quan hệ một-một, laravel sẽ tạo mối quan hệ một-nhiều. Mô hình PHP 7.1 và MySQL 5.7 là: vai trò và người dùng. Vai trò: chức năng công cộng user() { return
Câu hỏi này đã có câu trả lời ở đây: Đã đóng 11 năm trước. Có thể trùng lặp: Chuỗi Java: “Chuỗi s = Chuỗi mới(”ngớ ngẩn“);” Tôi đang duyệt
Tôi đang tạo một mạng xã hội nơi người dùng có thể tải lên và đăng hình ảnh cũng như video của họ. Bây giờ, tôi không biết liệu có tốt hơn nếu tạo một bảng trong cơ sở dữ liệu của mình, đặt tên là media và có cột media_type hay tạo các bảng riêng cho hình ảnh và video. cái này
Có một lớp singleton có thể được truy cập bởi n luồng. Mỗi luồng tải một thể hiện của lớp này và gọi các phương thức của lớp này trong một vòng lặp. Tôi phải kiểm soát luồng thực thi để mỗi luồng có thể gọi phương thức đầu tiên và tạm dừng, đồng thời chỉ sau khi tất cả các luồng gọi phương thức đó một lần, chúng mới phải tiếp tục công việc của mình. chủ đề
Có một truy vấn MySQL với số lượng tham số không xác định (được xây dựng động), có định dạng như sau: SELECT * FROM actions WHERE user1 = ? AND user10 = ?
Tôi đã kiểm tra trang Wikipedia nhưng không thể tìm thấy sự khác biệt giữa chúng, cả hai dường như chuyển đổi nhiều lớp thành nhiều bộ phân loại tuyến tính. Câu trả lời hay nhất Đây là về chiến lược phân chia dữ liệu đào tạo. Giả sử bạn có N mẫu dữ liệu chứa lớp C. One to One: Ở đây bạn chọn 2 cái một lúc
Tôi cố gắng chèn nhiều hàng trong sql. Nhưng nó chỉ chèn hàng cuối cùng và chỉ lưu ký tự đầu tiên của mỗi cột trong hàng đó. Tôi in truy vấn qua echo và nó chỉ hiển thị hàng cuối cùng nhưng cung cấp tất cả các ký tự của mỗi cột. Một điều nữa là tôi đang chèn giá trị vào cả hai bảng bằng cách nhấp vào nút gửi
Tôi có hai thực thể: Người và Công ty. Một công ty có một hoặc nhiều địa chỉ liên hệ (người). Công ty có ít nhất một người liên hệ chính (người). Cách tốt nhất để đạt được điều này là gì? Các thực thể như sau: public class Person { public
Tôi mới bắt đầu phát triển iOS và đã bắt đầu sử dụng Swift. Tôi hiện đang sử dụng điều hướng thanh tab với 3 tab/điều hướng. Tôi có nên phân lớp UIViewController và sử dụng nó cho cả 3 cảnh hay mỗi cảnh
Yêu cầu của tôi là cần mở hai cửa sổ nhưng cửa sổ thứ hai phải được mở sau khi cửa sổ đầu tiên in và đóng lại. Có thể được không? Nhưng cửa sổ thứ hai mở cùng lúc với cửa sổ đầu tiên. In mã HTML/JSP In hàm script Java (id) {
经过几个小时的反复试验,我找到了这个 thread其中解释了如何建立具有相同两种类型的一对多关系和一对一关系。 但是,我无法让它与级联删除一起使用: Thrown: "Unable to determ
我想验证我的表单,如果任何输入字段为空,错误警告将显示在空白输入字段旁边。对于空白输入,错误信息必须一次全部输出,而不是一一显示。如何做到这一点? 下面是我的javascript代码: fun
我有一系列这样的字体值(命令分隔一行): Yeseva+One, Yrsa, ... 我正在寻找一个 SED(或其他 bash 工具表达式)来将每个值转换为这样的行语句: --font-yeseva-
Tôi đang làm việc trên Learning Core Audio, một dịch vụ chuyển đổi âm thanh cốt lõi và tôi rất ấn tượng với ví dụ này trong mã mẫu của họ: while(1) { // quấn the destina
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this qu
Tôi là một lập trình viên xuất sắc, rất giỏi!