我知道快速排序和合并排序都需要O(n)辅助空间用于构造的临时子数组,并且就地快速排序需要O(log n)辅助空间用于递归堆栈帧.但是对于堆排序,似乎它也有最坏的O(n)辅助空间来构建临时堆,即使节点只是指向实际元素的指针.
我遇到了这个解释:
只需要额外的O(1)空间,因为堆是在要排序的数组中构建的.
但我认为这意味着原始数组必然已经被实现为某种树?如果原始数组只是一个向量,那么似乎仍然需要分配堆的内存.
我有一个选择菜单ng-options用于重复选项,我<option>在菜单中有一个默认值:
<select ng-model="selected" ng-options="d.id as d.value for d in data">
<option value="">Choose an option</option>
</select>
Run Code Online (Sandbox Code Playgroud)
问题:我想这样做,以便默认选项中的文本根据其中的另一个属性而更改$scope,我尝试了以下内容并且它不起作用:
<select ng-model="selected" ng-options="d.id as d.value for d in data">
<option value="" ng-if="!optional">Choose an option</option>
<option value="" ng-if="optional">Choose an option (optional)</option>
</select>
Run Code Online (Sandbox Code Playgroud)
它似乎只显示一个默认<option>元素,所以我也试过以下ng-show但它也不起作用:
<select ng-model="selected" ng-options="d.id as d.value for d in data">
<option value="">Choose an option <span ng-show="optional">(optional)</span></option>
</select>
Run Code Online (Sandbox Code Playgroud)
我知道您也可以<option ng-repeat>在选择菜单中进行操作,但选项的数据来自AJAX调用,并且在数据首次出现时无法正确更新,因此我坚持使用<select ng-options>.
关于如何让这个工作的任何建议?
以下两个语句之间有什么区别(在全局窗口的上下文中)?
(function() { return a; } )(); // ReferenceError: a is not defined
(function(a) { return a; } )(); // returns undefined
Run Code Online (Sandbox Code Playgroud)
我认为它与以下内容有关:
a; // ReferenceError: a is not defined
window.a; // undefined
Run Code Online (Sandbox Code Playgroud)
看起来第二个函数在范围链中上升并在全局窗口范围结束,其中a不是窗口的属性并因此返回undefined.但是,第一个功能不应该做同样的事情并返回undefined吗?
我发现这个关于未定义与未定义的SO问题,但它似乎更多地应用于变量而不是窗口范围中的属性.