Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Найти количество поворотов массива
- Есть функция поворта массива которая переносит последний элемент в начало массива
- function rotate_array(arr) {
- arr.unshift(arr.pop());
- return arr;
- }
- Затем эту функцию несколько раз (меньшее чем длинна массива) применили к некоторому массиву, длинной больше двух, содержащему неповторяющиеся числа в порядке неубывания [1, 3, 5, 7, 43, 76] .
- Получили что-то вроде [43, 76, 1, 3, 5, 7]
- Требуется написать функцию которая определит сколько раз применили функцию rotate_array .
- */
- // O(n)
- function calc_rotations(arr) {
- for (let i = 0; i < arr.length - 1; i++) {
- if (arr[i] > arr[i + 1]) {
- return i + 1;
- }
- }
- return 0;
- }
- // O(log(n))
- function calc_rotations(arr) {
- function check_item(i) {
- return i >= 0 && i <arr.length && arr[i] > arr[i + 1];
- }
- let start = 0;
- let end = arr.length - 1;
- while(end - start > 1) {
- let mid = start + Math.floor((end - start) / 2);
- if (check_item(mid)) {
- return mid + 1;
- } else if (arr[start] < arr[mid]) {
- start = mid;
- } else {
- end = mid;
- }
- }
- if (check_item(start)) {
- return start + 1;
- }
- if (check_item(end)) {
- return end + 1;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement