Tìm kiếm trong studio mã mảng được sắp xếp xoay
Cách tiếp cận này sẽ sử dụng kiểu boolean thực tế (và phân giải thành true và false) nếu trình biên dịch hỗ trợ nó. (cụ thể là C++) Show Tuy nhiên, sẽ tốt hơn nếu kiểm tra xem C++ có đang được sử dụng hay không (thông qua macro __cplusplus) và thực sự sử dụng true và false Nếu muốn thực hành các chương trình về cấu trúc dữ liệu và thuật toán, bạn có thể xem qua các câu hỏi phỏng vấn về cấu trúc dữ liệu và thuật toán Trong bài đăng này, chúng ta sẽ xem cách tìm kiếm một phần tử trong mảng được sắp xếp và xoay Vấn đềBạn được cung cấp một mảng được sắp xếp và xoay như bên dưới 1 2 3
int arr[] = {16,19,21,25,3,5,8,10};
Nếu bạn lưu ý rằng mảng được sắp xếp và xoay. Bạn cần tìm kiếm một phần tử trong mảng trên với độ phức tạp thời gian o(log n) Giải phápBạn có thể tìm kiếm một phần tử trong mảng trên bằng tìm kiếm tuyến tính nhưng điều đó sẽ mất o(n) thuật toán
Hãy hiểu điều này với sự giúp đỡ của ví dụ Các bước liên quan để tìm kiếm 5 trong mảng trên
Chương trình Java để tìm kiếm một phần tử trong một mảng được sắp xếp và xoayTạo một lớp có tên SearchElementSortedAndRotatedArrayMain. java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
gói org. arpit. java2blog; lớp công khai SearchElementSortedAndRotatedArrayMain {
công khai tĩnh vô hiệu chính(String[] args) { int arr[]={16,19,21,25,3,5,8,10}; Hệ thống. ra. println("Chỉ mục của phần tử 5. " + findElementRotatedSortedArray(arr . 0,arr.độ dài - 1,5)); } công khai tĩnh int findElementRotatedSortedArray(int[] arr,int low,int high,int number) { int mid; trong khi(thấp<=high) { trung bình = thấp + ((high - low) / 2);;
if(arr[mid]==number) { trả lại giữa; } if(arr[mid]<=arr[high]) { // Đã sắp xếp phần bên phải nếu(số > arr[mid] && number <=arr[high]) { thấp=trung bình+1; } khác { cao = trung bình - 1; } } else { // Phần bên trái được sắp xếp nếu(arr[low]<=number && number < arr[mid]) { cao=trung bình 1; } khác { thấp = trung bình + 1; } } } trả lại - 1; } } Khi bạn chạy chương trình trên, bạn sẽ nhận được kết quả bên dưới 1 2 3
Chỉ mục của phần tử 5 . 5
Bài đăng này có hữu ích không?Hãy cho chúng tôi biết nếu bạn thích bài viết. Đó là cách duy nhất chúng ta có thể cải thiện Đúng Không nhập_liên hệ Bạn cũng có thể thíchTìm kiếm Leetcode dãy – Tìm vị trí đầu và cuối của phần tử trong mảng đã sắp xếpSắp xếp một mảng gồm 0, 1 và 2Kiểm tra xem có thể đi đến cuối Mảng đã cho bằng cách Nhảy khôngKiểm tra xem các phần tử mảng có liên tiếp khôngTìm cực tiểu cục bộ trong mảngCửa sổ trượt tối đa trong javaĐếm số lần xuất hiện (hoặc tần suất) của từng phần tử trong một mảng được sắp xếpTìm các mảng con với tổng đã cho trong một mảngĐếm 1 trong Mảng nhị phân được sắp xếpTìm phần tử đỉnh trong mảng
Bạn sẽ tìm kiếm như thế nào trong danh sách được sắp xếp xoay vòng?Ý tưởng là tìm điểm trục, chia mảng thành hai mảng con và thực hiện tìm kiếm nhị phân . Đối với một mảng được sắp xếp (theo thứ tự tăng dần) và xoay, phần tử trục là phần tử duy nhất mà phần tử tiếp theo của nó nhỏ hơn nó. Sử dụng tìm kiếm nhị phân dựa trên ý tưởng trên, có thể tìm thấy trục.
Thuật toán nào có thể được sử dụng để tìm một phần tử trong một mảng đã được sắp xếp?Trong khoa học máy tính, tìm kiếm nhị phân , còn được gọi là tìm kiếm nửa khoảng, tìm kiếm logarit hoặc cắt nhị phân, là một thuật toán tìm kiếm . Tìm kiếm nhị phân so sánh giá trị đích với phần tử ở giữa của mảng.
Pivot trong mảng được sắp xếp xoay là gì?Phần tử Pivot là phần tử duy nhất trong mảng đầu vào nhỏ hơn phần tử trước đó . Một phần tử trục chia một mảng đã xoay được sắp xếp thành hai mảng tăng dần đơn điệu. Ví dụ. Mảng xoay được sắp xếp. 4 5 6 7 8 1 2 3 1 là phần tử Pivot.
Làm cách nào để tìm phần tử trục trong mảng trong C?Chương trình tìm phần tử trục trong một mảng có tất cả các phần tử khác 0 và duy nhất. *Một phần tử trong một mảng là một phần tử trục nếu tổng của tất cả các phần tử trong danh sách bên trái của nó bằng tổng của tất cả các phần tử bên phải của nó |