功能OffLineMinimum(strArr)(Coderbyte练习#30)

时间:2015-08-05 15:00:24

标签: javascript

  

使用JavaScript语言,让function OffLineMinimum(strArr)传递strArr参数   将是1 ... n和字母" E"和   根据以下规则返回正确的子集。

     

输入将采用以下格式:   ["I","I","E","I",...,"E",...,"I"]我代表的是整数   并且E表示取出当前整体中的最小整数   集。

     

完成后,程序应该返回带有整数的新集合   以逗号分隔。

     

例如:如果strArr是   ["5","4","6","E","1","7","E","E","3","2"]然后您的计划应该   返回4,1,5

我是JS的新学员。

  1. 我真的不明白这个问题。
  2. 我对其他答案做了一些研究。例如,下面这个。 https://github.com/ratracegrad/coderbyte-Beginner/blob/master/Off%20Line%20Minimium#L42 你能带我走过吗?
  3. 对初学者有任何建议或更好的解决方案吗?比如如何为此编写伪代码或者在阅读这样的问题时如何继续?
  4. 感谢您花时间阅读本文。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,我会使用dichotomic searchesstrArr中的数字插入到有序数组中。找到"E"时,将删除排序数组中的第一个数字,而不是插入,并将其推送到结果数组。

var insertInOrderedArr = function f(arr, item, from=0, to=arr.length) {
  if(from === to) return arr.splice(to, 0, item);
  var mid = Math.floor((from + to) / 2);
  if(arr[mid] > item) return f(arr, item, from, mid);
  if(arr[mid] < item) return f(arr, item, mid+1, to);
  return f(arr, item, mid, mid);
}
function offLineMinimum(strArr) {
  var sorted = [],
      result = [];
  for(var item of strArr) {
    if(item === "E") result.push(sorted.shift());
    else insertInOrderedArr(sorted, +item);
  }
  return result;
}