我用兩種相似的語言回答了一個名為“從排序陣列中洗掉重復項”的 LeetCode 問題,以準備不同的面試。我的 Java 解決方案被標記為正確,但 C# 解決方案引發運行時錯誤并顯示訊息Unhandled exception. System.ArgumentException: Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection.
我在 Java 中的正確解決方案如下:
public int removeDuplicates(int[] nums) {
int pointer1 = 0;
for (int pointer2 = 1; pointer2 < nums.length; pointer2 ) {
if (nums[pointer1] != nums[pointer2]) {
pointer1 ;
nums[pointer1] = nums[pointer2];
}
}
return pointer1 1;
}
我在 C# 中的錯誤解決方案如下:
public int RemoveDuplicates(int[] nums)
{
int pointer1 = 0;
for (int pointer2 = 1; pointer2 < nums.Length; pointer2 )
{
if (nums[pointer1] != nums[pointer2])
{
pointer1 ;
nums[pointer1] = nums[pointer2];
}
}
return pointer1 1;
}
要求是就地執行此操作,因此我避免使用額外的記憶體。當我在回圈范圍內指定長度時,我無法理解為什么長度超出陣列范圍。此外,僅在嘗試 C# 解決方案時才會拋出此錯誤。我正在努力改進 C#,并想知道我的實作有什么問題。感謝您的任何和所有反饋。
uj5u.com熱心網友回復:
拋出的可能不是您的代碼,因為您從中獲得的唯一 OutOfRange 例外是“索引越界”,而不是“偏移和長度越界”。無論呼叫您的代碼拋出。
它可能會嘗試在空陣列或 null 上運行您的方法,嘗試在nums.Length == 0或時回傳 0 或 -1 nums == null。
(來自評論:是的,當一個空陣列作為引數傳遞時,它預計為 0。需要的檢查是:
if (nums.Length == 0)
return 0;
)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/346802.html
下一篇:方陣乘法遞回與傳統方式
