leetcode 455 贪心
https://leetcode.com/problems/assign-cookies/
简单的循环判断
class Solution(object):
def findContentChildren(self, g, s):
"""
:type g: List[int]
:type s: List[int]
:rtype: int
"""
g,s=sorted(g),sorted(s)
# count=0
i,j=0,0
while i!=len(g) and j!=len(s):
if g[i]<=s[j]:
i+=1
j+=1
return i
leetcode 75 荷兰国旗
https://leetcode.com/problems/sort-colors/
使用多指针来操作
class Solution(object):
def sortColors(self, nums):
"""
:type nums: List[int]
:rtype: None Do not return anything, modify nums in-place instead.
"""
red,white,blue=0,0,len(nums)-1
while white<=blue:
if nums[white]==0:
nums[red],nums[white]=nums[white],nums[red]
white+=1
red+=1
elif nums[white]==1:
white+=1
else:
nums[white],nums[blue]=nums[blue],nums[white]
blue-=1
return nums
leetcode 347桶排序
https://leetcode.com/problems/top-k-frequent-elements/
class Solution(object):
def topKFrequent(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: List[int]
"""
hs = {}
frq = {}
for i in xrange(0, len(nums)):
if nums[i] not in hs:
hs[nums[i]] = 1
else:
hs[nums[i]] += 1
for z,v in hs.iteritems():
if v not in frq:
frq[v] = [z]
else:
frq[v].append(z)
arr = []
for x in xrange(len(nums), 0, -1):
if x in frq:
for i in frq[x]:
arr.append(i)
return [arr[x] for x in xrange(0, k)]
leetcode 215 快排
https://leetcode.com/problems/kth-largest-element-in-an-array/
class Solution(object):
def findKthLargest(self, nums, k):
'''
:type nums: List[int]
:type k: int
:rtype: int
'''
return self.quickSelect(nums, 0, len(nums)-1, k)
def quickSelect(self, nums, start, n, k): # quick select
pos = self.partition(nums, start, n)
if pos == k-1:
return nums[pos]
elif pos >= k:
return self.quickSelect(nums, start, pos - 1, k)
return self.quickSelect(nums, pos + 1, n, k)
def partition(self, nums, left, right):
pivot = nums[right] # pick the last one as pivot
i = left
for j in xrange(left, right): # left to right -1
if nums[j] > pivot: # the larger elements are in left side
nums[j], nums[i] = nums[i], nums[j]
i += 1
nums[right], nums[i] = nums[i], nums[right] # swap the i and the last element
return i
leetcode 167 双指针
https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/
class Solution(object):
def twoSum(self, numbers, target):
"""
:type numbers: List[int]
:type target: int
:rtype: List[int]
"""
l,r=0,len(numbers)-1
while l<r:
s=numbers[l]+numbers[r]
if s==target:
return [l+1,r+1]
elif s<target:
l+=1
else:
r-=1