Advertisement
Guest User

1

a guest
Feb 26th, 2020
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function removeZeros(arr) {
  2.     let writeIndex = 0;
  3.     for (let i = 0; i < arr.length; i++) {
  4.         if (arr[i] !== 0) {
  5.             arr[writeIndex++] = arr[i];
  6.         }
  7.     }
  8.     arr.splice(writeIndex, arr.length - writeIndex);
  9. }
  10.    
  11. function isPalindrome(s) {
  12.     function isAlphabetic(symbol) {
  13.         return symbol.toLowerCase() != symbol || symbol.toUpperCase() != symbol || !isNaN(Number(symbol));
  14.     }
  15.    
  16.     let left = 0;
  17.     let right = s.length - 1;
  18.    
  19.     while (left < right) {
  20.         while(left < right && !isAlphabetic(s[left])) left++;
  21.         while(left < right && !isAlphabetic(s[right])) right--;
  22.    
  23.         if (s[left++].toLowerCase() !== s[right--].toLowerCase()) return false;
  24.     }
  25.    
  26.     return true;
  27. }
  28.    
  29. function findTwoMaximums(arr) {
  30.     if (arr.length === 0) return [];
  31.     if (arr.length === 1) return arr;
  32.    
  33.     let fstMax = -Infinity;
  34.     let sndMax = -Infinity;
  35.    
  36.     for (let elem of arr) {
  37.         if (elem > fstMax) {
  38.             sndMax = fstMax;
  39.             fstMax = elem;
  40.         } else if (elem > sndMax) {
  41.             sndMax = elem;
  42.         }
  43.     }
  44.    
  45.     return [fstMax, sndMax];
  46. }
  47.    
  48. // TASK: Дан граф, является ли он бинарным деревом. Время: О(число вершин)
  49. function isBinaryTree(graph) {}
  50.  
  51. // TASK: Является ли дерево - бинарным деревом поиска
  52. function isBinarySearchTree(tree) {}
  53.  
  54. // TASK: слияние 2 / k отсортированных списков
  55. function merge2(arr1, arr2) {}
  56. function mergeK(arrOfArrs) {}
  57.    
  58. function median(v1, v2, v3) {
  59.     if (v1 > v2) {
  60.         if (v2 > v3) {
  61.             return v2;
  62.         } else if (v1 > v3) {
  63.             return v3;
  64.         } else {
  65.             return v1;
  66.         }
  67.     } else {
  68.         if (v1 > v3) {
  69.             return v1;
  70.         } else if (v2 > v3) {
  71.             return v3;
  72.         } else {
  73.             return v2;
  74.         }
  75.     }
  76. }
  77.    
  78. // TASK: Найти строку S' в строке T, которая является анаграмой S.
  79. function findSubstring(T, S) {}
  80.    
  81. function maxSubstr(str) {
  82.     let startIndexRes = 0;
  83.     let lengthRes = 0;
  84.    
  85.     let startIndexCur = 0;
  86.     let lengthCur = 0;
  87.    
  88.     let position = {};
  89.    
  90.     for (let i = 0; i < str.length; i++) {
  91.         if (!position[str[i]] || startIndexCur > position[str[i]]) {
  92.             position[str[i]] = i;
  93.             lengthCur++;
  94.             continue;
  95.         }
  96.    
  97.         if (lengthCur > lengthRes) {
  98.             lengthRes = lengthCur;
  99.             startIndexRes = startIndexCur;
  100.         }
  101.    
  102.         startIndexCur = position[str[i]] + 1;
  103.         lengthCur = i - position[str[i]];
  104.     }
  105.    
  106.     if (lengthCur > lengthRes) {
  107.         lengthRes = lengthCur;
  108.         startIndexRes = startIndexCur;
  109.     }
  110.    
  111.     return s.slice(startIndexRes, startIndexRes + lengthRes);
  112. }
  113.    
  114. const bannerList = [
  115.     {w: 10, banner: {id: 1}},
  116.     {w: 2, banner: {id: 2}},
  117.     {w: 1, banner: {id: 3}}
  118. ];
  119.    
  120. function getBanner() {
  121.     const random = Math.random();
  122.     const sumWeight = bannerList.reduce((sum, item) => sum + item.w, 0);
  123.     const index = bannerList
  124.         .map(item => item.w / sumWeight)
  125.         .reduce((prev, prob, i) => {
  126.             prev.push(i === 0 ? prob : prev[i - 1] + prob);
  127.             return prev;
  128.         }, [])
  129.         .findIndex(value => random < value);
  130.     return bannerList[index].banner;
  131. }
  132.    
  133. function sortTouristRoute(tickets) {
  134.     const notFirstCities = new Set();
  135.     const fromIndices = new Map();
  136.    
  137.     tickets.forEach((ticket, index) => {
  138.         notFirstCities.add(ticket.to);
  139.         fromIndices.set(ticket.from, index);
  140.     });
  141.     let cityIndex = tickets.findIndex(ticket => !notFirstCities.has(ticket.from));
  142.    
  143.     for (let i = 0; i < tickets.length; i++) {
  144.         const ticket = tickets[cityIndex];
  145.         const ticketSwap = tickets[i];
  146.         tickets[i] = ticket;
  147.         tickets[cityIndex] = ticketSwap;
  148.         fromIndices.set(tickets[cityIndex].from, cityIndex);
  149.         cityIndex = fromIndices.get(ticket.to);
  150.     }
  151. }
  152.    
  153. // TESTING
  154.    
  155. const tickets = [
  156.     { from: '3', to: '4' },
  157.     { from: '2', to: '3' },
  158.     { from: '4', to: '5' },
  159.     { from: '0', to: '1' },
  160.     { from: '1', to: '2' },
  161.     { from: '6', to: '7' },
  162.     { from: '5', to: '6' },
  163. ];
  164.    
  165. sortTouristRoute(tickets);
  166. console.log(tickets);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement