2 回答

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊
在 C、C++、C#、PHP、Perl 等具有引用的語(yǔ)言中,您可以將指針或?qū)χ档囊脗鬟f給函數(shù)并就地修改它:
#include <stdio.h>
void doit(int *ptr_to_n) {
*ptr_to_n = 42; // modifies the value pointed to by ptr_to_n by a dereference
}
int main(void) {
int n = 415;
doit(&n);
printf(" %d\n", n); // => 42
return 0;
}
Java 是嚴(yán)格按值傳遞的,不提供指針或?qū)ぶ愤\(yùn)算符。您在此處提供的代碼濫用數(shù)組來(lái)克服此限制。在下面的代碼中,調(diào)用范圍中對(duì)數(shù)組的引用被復(fù)制并按值傳遞給res,但res仍然指向與 相同的底層對(duì)象arr,因此數(shù)組本身沒(méi)有被復(fù)制,只是被別名化了。
class Main {
public static void main(String[] args) {
int n = 415;
int[] arr = {415};
doit(n);
doitPointer(arr);
System.out.println("Copy primitive: " + n);
System.out.println("Copy reference to object: " + arr[0]);
}
static void doit(int n) {
n = 42; // assignment to local variable which will be unavailable in outer scope
}
static void doitPointer(int[] res) {
res[0] = 42; // assignment to element in referenced array, available in outer scope
}
}
輸出:
Copy primitive: 415
Copy reference to object: 42
在競(jìng)爭(zhēng)性編程中,這是一種可以簡(jiǎn)化邏輯的有用且可接受的技術(shù),但通常這在生產(chǎn)環(huán)境中是懶惰的做法,因?yàn)樗茐牧朔庋b,使代碼難以推理并具有語(yǔ)義成本。
使用一個(gè)類(lèi)來(lái)封裝值,將函數(shù)放在一個(gè)范圍內(nèi),以便它們可以修改私有類(lèi)成員,或者重寫(xiě)邏輯以避免引用的需要。

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊
這真的很hacky。您正試圖通過(guò)使用容器作為輸入變量來(lái)破解此解決方案以允許輸出參數(shù)。您將它放在一個(gè)容器中以避免整數(shù)的按值傳遞性質(zhì),這會(huì)將參數(shù)復(fù)制到函數(shù)中。
相反,為什么不只返回多個(gè)值呢?
/**
* Return an array containing the overall nodes
* maximum height and the overall max gain.
**/
public int[] maxGain(TreeNode currNode) {
if (currNode == null) {
return new int[] { 0, Integer.MIN_VALUE };
}
int[] leftResult = maxGain(currNode.left);
int[] rightResult = maxGain(currNode.right);
int maxHeight = Math.max(leftResult[0], rightResult[0]) + currNode.val;
int currGain = leftResult[0] + rightResult[0] + currNode.val;
int maxGain = Math.max(currGain, Math.max(leftResult[1], rightResult[1]));
return new int[] { maxHeight, maxGain };
}
public int maxPathSum(TreeNode root) {
int[] result = maxGain(root);
return result[1];
}
添加回答
舉報(bào)