JavaScript中的‘auxiliary variable’是什么?在原地算法中如何使用?
什么是辅助变量(Auxiliary Variables)?以及在原地算法中的用法
定义
辅助变量就是算法执行过程中临时用来存储数据的变量,说白了就是个"临时中转站"。在原地(in-place)算法里,我们不能开辟额外的大存储空间(比如新数组、新哈希表),但可以用少量这类单个变量来临时存数据,避免操作时覆盖掉需要保留的原始值。
为什么原地算法离不开它?
原地算法的核心是在原数据结构上直接修改,不额外占用太多内存。但很多操作(比如交换、移位)如果直接做,会把原来的数据覆盖掉,这时候就需要辅助变量先把要保留的值存起来,再完成后续操作。
具体用法示例
1. 交换两个变量
最基础的场景,交换两个数如果不用辅助变量,在很多语言里会丢失原始值:
a = 5 b = 10 # 用辅助变量temp中转 temp = a # 先把a的原始值存到temp里 a = b # 把b的值赋给a b = temp # 再把temp里的原始a值赋给b # 现在a=10,b=5,完成交换
2. 原地反转数组
反转数组时,需要交换首尾元素,辅助变量用来临时存储其中一个元素的值:
def reverse_in_place(arr): left = 0 right = len(arr) - 1 while left < right: # 用temp存左边元素,避免被覆盖 temp = arr[left] arr[left] = arr[right] arr[right] = temp left += 1 right -= 1 # 测试 my_arr = [1,2,3,4,5] reverse_in_place(my_arr) print(my_arr) # 输出 [5,4,3,2,1]
这里的temp就是辅助变量,它只占用固定大小的内存(O(1)空间复杂度),完全符合原地算法的要求。
注意区分:辅助变量 vs 辅助数据结构
原地算法允许用辅助变量,但绝对不能用额外的大的数据结构(比如新数组、链表)。比如反转数组时如果新建一个数组存结果,那就不是原地算法了——但用单个temp变量是完全没问题的。
内容的提问来源于stack exchange,提问作者wraytheon
相关产品推荐
相关产品推荐

