題目描述:合併兩個有序鍊錶
解題思路:水題
# definition for singly-linked list.
# class listnode(object):
# def __init__(self, x):
# self.val = x
# self.next = none
class
solution
(object):
defmergetwolists
(self, l1, l2)
:"""
:type l1: listnode
:type l2: listnode
:rtype: listnode
"""ans =
none
new =
none
while l1 or l2:
ifnot l1:
ifnot new:
new = listnode(0)
ans = new
else
: new.
next
= listnode(0)
new = new.
next
new.val = l2.val
l2 = l2.
next
elif
not l2:
ifnot new:
new = listnode(0)
ans = new
else
: new.
next
= listnode(0)
new = new.
next
new.val = l1.val
l1 = l1.
next
elif
not l1 and
not l2:
return new
elif l1.val >= l2.val:
ifnot new:
new = listnode(0)
ans = new
else
: new.
next
= listnode(0)
new = new.
next
new.val = l2.val
l2 = l2.
next
elif l1.val < l2.val:
ifnot new:
new = listnode(0)
ans = new
else
: new.
next
= listnode(0)
new = new.
next
new.val = l1.val
l1 = l1.
next
return ans
題目描述:合併k個有序鍊錶
解題思路:比較難,剛開始用合併兩個有序陣列的方法來做,果斷超時,做了太多的重複計算。後來看到有人說優先佇列,於是只要知道優先佇列就很簡單了,然後去看了一下stl的priority_queue,**就很好寫了,用優先佇列儲存每個鍊錶的當前位置,然後就出隊進隊就行了。
class solution };
listnode*
mergeklists
(vector>
& lists)
else
if(tmp->next)
que.
push
(tmp->next);}
return head;}}
;
題目描述:把鍊錶的每兩個元素調換個位置
解題思路:水題,指標注意好就行了
class solution };
listnode*
mergeklists
(vector>
& lists)
else
if(tmp->next)
que.
push
(tmp->next);}
return head;}}
;
解題思路:難點就在於掌握好每個指標,每組的隊首隊尾都要記錄,還要記錄上一組的隊尾,然後就按照倒置一條鍊錶的思路,用頭插法倒置k個節點,再把當前組和上一組串起來。只要注意好每個指標,思路其實很簡單,花了乙個兩個小時,才順利寫好修改指標的**。
/**
* definition for singly-linked list.
* struct listnode
* };
*/class solution
if(cnt == k && end)
else
return head;
while
(end)
fst = end;
mid = end;
int tmp =1;
while
(end && tmp < k)
if(tmp == k && end)
end = mid->next;
else}}
if(grp == head)
head = fst;
else
return head;}}
;
題目描述:移除陣列重複元素
解題思路:水題
class solution
}return i+1;
}};
題目描述:給定乙個陣列和乙個值k,移除陣列中所有的k
解題思路:水題
class
solution
(object):
defremoveelement
(self, nums, val)
:"""
:type nums: list[int]
:type val: int
:rtype: int
"""length =
len(nums)
-nums.count(val)
while val in nums:
nums.remove(val)
return length
題目描述:定位模式串在正文中的位置
解題思路:kmp入門題
class
solution
(object):
defstrstr
(self, haystack, needle)
:"""
:type haystack: str
:type needle: str
:rtype: int
"""ifnot needle:
return
0 next_ =[0
,0] p =
0for i in
range(1
,len
(needle)):
p = next_[i]
while p and needle[p]
!= needle[i]
: p = next_[p]
if needle[p]
== needle[i]1)
else0)
# print(next_)
p =0for i in
range
(len
(haystack)):
while p and needle[p]
!= haystack[i]
: p = next_[p]
if needle[p]
== haystack[i]
: p +=
1if p ==
len(needle)
:return i-p+
1return
-1
Leetcode 33 解題報告
leetcode 33 解題報告 對於排序之後的資料結構,二分查詢是不二法則。本題的關鍵就在於如何針對旋轉之後的排序陣列進行二分查詢。考慮到陣列中沒有重複元素 注意這一前提十分關鍵 可以提供兩種思路 1 兩次二分查詢 第一次二分查詢的目標是找出陣列具體在哪個位置做了旋轉,這個可以簡單地通過比較num...
LeetCode50 Pow x, n 解題報告
題目的意思是實現乙個pow 函式。input 2.00000,10 output 1024.00000這裡用的是遞迴的辦法,能夠降低時間複雜度,不過需要對n進行奇數,偶數進行判斷,用了 0x1進行判斷,當判斷n為奇數的時候,乘上x。如下 class solution bool flag false ...
LeetCode 1 Two Sum 解題報告
題意 陣列nums中,有兩個元素的和是target,找出這兩個元素的位置。思路 維護乙個map,用陣列的元素的值做key,用元素的位置做value。遍歷nums,對每個num來說,如果map target num 有值的話,就返回map target num 和num的位置,如果沒有找到的話,就把n...