leetcode刷題 雙指標

2022-07-07 04:24:12 字數 3316 閱讀 1111

給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。

說明:  返回的下標值(index1 和 index2)不是從零開始的。你可以假設每個輸入只對應唯一的答案,而且你不可以重複使用相同的元素。 

示例:  輸入: numbers = [2, 7, 11, 15], target = 9     輸出: [1,2]

這個題如果使用乙個指標就需要迴圈遍歷且浪費陣列已經排序好的資訊。使用兩個指標一頭一尾,對比目標值不斷變化即可。

public

int twosum(int numbers, int

target)

ret[0] = low + 1;

ret[1] = high + 1;

return

ret;

}

給定乙個非負整數 c ,你要判斷是否存在兩個整數 a 和 b,使得 a2 + b2 = c 。

示例 1:

輸入:c = 5

輸出:true

解釋:1 * 1 + 2 * 2 = 5

public

boolean judgesquaresum(int

c)

if(low * low + high * high if(low * low + high * high >c)

}return

false

; }

編寫乙個函式,以字串作為輸入,反轉該字串中的母音字母。

示例 1:

輸入:"hello"

輸出:"holle"

class

solution

if(isvowel(arr[i]) && !isvowel(arr[j]))

if(!isvowel(arr[i]) &&isvowel(arr[j]))

if(!isvowel(arr[i]) && !isvowel(arr[j]))

}return

newstring(arr);

}public

boolean isvowel(char

c)else

}}

給定乙個非空字串s,最多刪除乙個字元。判斷是否能成為回文字串。

示例 1:

輸入: "aba"

輸出: true

class

solution

else

} return

true

; }

//這個函式判斷的是不刪除字元,判斷是否能成為回文字串

private

boolean

isvalidpalindrome(string s)

else

}return

true

; }

}

給你兩個有序整數陣列 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為乙個有序陣列。

初始化 nums1 和 nums2 的元素數量分別為 m 和 n 。你可以假設 nums1 的空間大小等於 m + n,這樣它就有足夠的空間儲存來自 nums2 的元素。

我的思維還是太僵化,首先想到的思路就是新建乙個陣列,然後從頭開始比較nums1 和nums2 的值放進新陣列中,最後在全部轉移到1中。

題目中暗示直接放在nums1 中,所以從後往前遍歷,會節約陣列空間。

public

void merge(int nums1, int m, int nums2, int

n)

if(i >= 0 && nums1[i] }

while(i == -1 && j >= 0)

}

給定乙個鍊錶,判斷鍊錶中是否有環。

如果鍊錶中有某個節點,可以通過連續跟蹤 next 指標再次到達,則鍊錶中存在環。 為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鍊錶中沒有環。注意:pos 不作為引數進行傳遞,僅僅是為了標識鍊錶的實際情況。

如果鍊錶中存在環,則返回 true 。 否則,返回 false 。

高階:你能用 o(1)(即,常量)記憶體解決此問題嗎?

我想到的是快慢指標的演算法。如果有環,快慢指標一定會相遇。

public

boolean

hascycle(listnode head)

listnode low =head.next;

listnode fast =head.next.next;

while(fast !=low)

low =low.next;

fast =fast.next.next;

}return

true

; }

給定乙個字串和乙個字串字典,找到字典裡面最長的字串,該字串可以通過刪除給定字串的某些字元來得到。如果答案不止乙個,返回長度最長且字典順序最小的字串。如果答案不存在,則返回空字串。

示例 1:

輸入:輸出:

我的解法是,先寫乙個是否為子字串的函式,然後遍歷字典。

這個題有歧義,地方在於它所說的字典順序並不是在字典中的順序,而是字面意思的字典序。ab > ba, 使用compareto 函式比較即可。

class

solution

if(issubstring(s, temp) && temp.length() == ret.length() && temp.compareto(ret) < 0)

}return

ret;

}//次函式判斷s2 是否為 s1 的子字串

private

boolean

issubstring(string s1, string s2)

else

}return j == s2.length() ? true : false

; }

}

leetcode刷題 雙指標

使用雙指標,乙個指向最左邊,乙個指向最右邊,判斷與目標target的大小關係 public int twosum int numbers,int target else if numbers l numbers r else return newint 0 題目 給定乙個非負整數 c 你要判斷是否存...

leetcode刷題 演算法(1) 雙指標

167.two sum ii input array is sorted easy 633.sum of square numbers easy 注意 大數,以及臨界情況 345.reverse vowels of a string easy 注意 大寫情況 680.valid palindrome...

Leetcode刷題筆記(C ) 雙指標

給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被...