[167] 兩數之和 ii - 輸入有序陣列
input: numbers =
, target =
9output: index1 =
1, index2 =
2
我的弱智解法:全部遍歷一遍
class
solution}}
return array;
}}
優質解法:使用雙指標,乙個指標指向值較小的元素,乙個指標指向值較大的元素。指向較小元素的指標從頭向尾遍歷,指向較大元素的指標從尾向頭遍歷。
陣列中的元素最多遍歷一次,時間複雜度為 o(n)。只使用了兩個額外變數,空間複雜度為 o(1)。
public
int[
]twosum
(int
numbers,
int target);}
else
if(sum < target)
else
}return null;
}
[633]平方數之和
input:
5output: true
comment:1*
1+2*
2=5
解題思路和上道題類似,為了降低時間複雜度,使用到了sqrt
public
boolean
judgesquaresum
(int target)
else
if(powsum > target)
else
}return
false
;}
[345]反轉字串中的母音字母
input:
"leetcode"
output:
"leotcede"
解題思路:使用雙指標,乙個指標從頭向尾遍歷,乙個指標從尾到頭遍歷,當兩個指標都遍歷到母音字元時,交換這兩個母音字元。
class
solution
elseif(
!vowels.
contains
(cj)
)else
}return
newstring
(result);}
}
[680] 驗證回文字串 ⅱ
input:
"abca"
output: true
comment: you could delete the character 'c'
.
解題思路:在判斷是否為回文字串時,我們不需要判斷整個字串,因為左指標左邊和右指標右邊的字元之前已經判斷過具有對稱性質,所以只需要判斷中間的子字串即可。
在試著刪除字元時,我們既可以刪除左指標指向的字元,也可以刪除右指標指向的字元。
public
boolean
validpalindrome
(string s)
}return
true;}
private
boolean
ispalindrome
(string s,
int i,
int j)
}return
true
;}
[88] 合併兩個有序陣列
input:
nums1 =[1
,2,3
,0,0
,0], m =
3nums2 =[2
,5,6
], n =
3output:[1
,2,2
,3,5
,6]
解題思路:把歸併結果存到第乙個陣列上。需要從尾開始遍歷,否則在 nums1 上歸併得到的值會覆蓋還未進行歸併比較的值。
public
void
merge
(int
nums1,
int m,
int[
] nums2,
int n)
else
if(index2 <0)
else
if(nums1[index1]
> nums2[index2]
)else
}}
[141]環形鍊錶
使用雙指標,乙個指標每次移動乙個節點,乙個指標每次移動兩個節點,如果存在環,那麼這兩個指標一定會相遇。
/**
* definition for singly-linked list.
* class listnode
* }*/public
boolean
hascycle
(listnode head)
listnode l1 = head, l2 = head.next;
while
(l1 != null && l2 != null && l2.next != null)
l1 = l1.next;
l2 = l2.next.next;
}return
false
;}
[524]通過刪除字母匹配到字典裡最長單詞
input:
s ="abpcplea"
, d =
["ale",,
"monkey"
,"plea"
]output:
解題思路:可以認為 target 是 s 的子串行,我們可以使用雙指標來判斷乙個字串是否為另乙個字串的子串行。
public string findlongestword
(string s, list
d)if
(issubstr
(s, target))}
return longestword;
}private
boolean
issubstr
(string s, string target)
i++;}
return j == target.
length()
;}
演算法 LeetCode刷題
given 1,3 2,6 8,10 15,18 return 1,6 8,10 15,18 關鍵就是a 1 b 0 也就是array i 1 1 array i 0 const merge array return array console.log merge 1,3 8,10 2,6 15,1...
演算法題 LeetCode刷題(五)
資料結構和演算法是程式設計路上永遠無法避開的兩個核心知識點,本系列 演算法題 旨在記錄刷題過程中的一些心得體會,將會挑出leetcode等最具代表性的題目進行解析,題解基本都來自於leetcode官網 本文是第五篇。給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以...
LeetCode刷題 演算法篇
暴力解法 class solution def twosum self,nums list int target int list int i 0 while i j i 1 while j if nums i nums j target return i,j j 1i 1 return none ...