Skip to content

Commit d9c000b

Browse files
committed
2019-5-22
1 parent befd8b7 commit d9c000b

File tree

7 files changed

+262
-0
lines changed

7 files changed

+262
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
class Solution(object):
2+
def search(self, nums, target):
3+
"""
4+
:type nums: List[int]
5+
:type target: int
6+
:rtype: int
7+
"""
8+
if not nums:
9+
return -1
10+
if len(nums) == 1:
11+
return 0 if nums[0] == target else -1
12+
13+
lo, hi = 0, len(nums) - 1
14+
while(lo <= hi):
15+
mid = (lo + hi) // 2
16+
# print mid, nums[mid]
17+
if mid + 1 < len(nums) and nums[mid] > nums[mid +1]:
18+
break
19+
if nums[mid] < nums[-1]:
20+
hi = mid - 1
21+
elif nums[mid] >= nums[0]:
22+
lo = mid + 1
23+
24+
if lo > hi:#ĂťÓĐĐýת
25+
lo, hi = 0, len(nums) - 1
26+
else:
27+
if target >= nums[0]:
28+
lo, hi = 0, mid
29+
else:
30+
lo, hi = mid + 1, len(nums) - 1
31+
32+
while(lo <= hi):
33+
# print lo, hi
34+
mid = (lo + hi) // 2
35+
if nums[mid] == target:
36+
return mid
37+
elif nums[mid] > target:
38+
hi = mid - 1
39+
else:
40+
lo = mid + 1
41+
42+
return -1
43+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
class Solution(object):
2+
def searchRange(self, nums, target):
3+
"""
4+
:type nums: List[int]
5+
:type target: int
6+
:rtype: List[int]
7+
"""
8+
lo, hi = 0, len(nums) - 1
9+
#找第一个target
10+
while(lo <= hi):
11+
mid = (lo + hi) // 2
12+
if nums[mid] == target:
13+
break
14+
elif nums[mid] > target:
15+
hi = mid - 1
16+
else:
17+
lo = mid + 1
18+
if lo > hi: #不存在
19+
return [-1, -1]
20+
21+
midtarget = mid
22+
lo, hi = 0, mid
23+
leftpos = 0
24+
while(lo <= hi):
25+
# print lo, hi
26+
if (hi >= 1 and nums[hi - 1] != target) or hi == 0: #找到左边界或者找到头了
27+
leftpos = hi
28+
break
29+
mid = (lo + hi) // 2
30+
if nums[mid] == target:
31+
hi = mid
32+
elif nums[mid] < target:
33+
lo = mid + 1
34+
35+
rightpos = 0
36+
lo, hi = midtarget, len(nums) - 1
37+
while(lo <= hi):
38+
if (lo <= len(nums) - 2 and nums[lo + 1] != target) or lo == len(nums) - 1: #找到右边界或者找到头了
39+
rightpos = lo
40+
break
41+
mid = (lo + hi + 1) // 2
42+
if nums[mid] == target:
43+
lo = mid
44+
elif nums[mid] > target:
45+
hi = mid - 1
46+
47+
return [leftpos, rightpos]
48+
+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Definition for an interval.
2+
# class Interval(object):
3+
# def __init__(self, s=0, e=0):
4+
# self.start = s
5+
# self.end = e
6+
7+
class Solution(object):
8+
def insert(self, intervals, newInterval):
9+
"""
10+
:type intervals: List[Interval]
11+
:type newInterval: Interval
12+
:rtype: List[Interval]
13+
"""
14+
# tmp = Interval(newInterval[0], newInterval[1])
15+
intervals.append(newInterval)
16+
# intervals[-1] = newInterval
17+
# print type(intervals[0]), type(tmp)
18+
return self.merge(intervals)
19+
20+
def merge(self, intervals):
21+
"""
22+
:type intervals: List[Interval]
23+
:rtype: List[Interval]
24+
"""
25+
26+
if not intervals:
27+
return []
28+
intervals = sorted(intervals,key=lambda x:x[0])
29+
res = []
30+
left = intervals[0][0]
31+
right = intervals[0][1]
32+
for item in intervals:
33+
if item[0] <= right:
34+
right = max(right, item[1])
35+
else:
36+
res.append([left, right])
37+
left = item[0]
38+
right = item[1]
39+
res.append([left, right])
40+
41+
return res
42+
+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import math
2+
class Solution(object):
3+
def getPermutation(self, n, k):
4+
"""
5+
:type n: int
6+
:type k: int
7+
:rtype: str
8+
"""
9+
digit = [i for i in range(1, n + 1)] #生成1 ~ n的列表
10+
res = ""
11+
while n > 0:
12+
tmp = math.factorial(n - 1) #计算一共有多少种组合
13+
idx = (k - 1) / tmp #由K在tmp中占的比例来确定第一位的数字
14+
k -= idx * tmp #第一位确定之后,刷新k
15+
res += str(digit[idx])
16+
digit.pop(idx)
17+
n -= 1
18+
return res
+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# Definition for singly-linked list.
2+
# class ListNode(object):
3+
# def __init__(self, x):
4+
# self.val = x
5+
# self.next = None
6+
7+
class Solution(object):
8+
def reverseBetween(self, head, m, n):
9+
"""
10+
:type head: ListNode
11+
:type m: int
12+
:type n: int
13+
:rtype: ListNode
14+
"""
15+
# 先找到m ~ n这一段,翻转,再塞回去
16+
if m == n:
17+
return head
18+
cnt = 1
19+
pre_m, pn = None, None
20+
node = head
21+
while(cnt < n):
22+
# print node.val, cnt
23+
if cnt == m - 1:
24+
pre_m = node
25+
node, cnt = node.next, cnt + 1
26+
pn = node
27+
if pn:
28+
nextn = pn.next
29+
pn.next = None
30+
else:
31+
nextn = None
32+
# print pre_m.val, nextn.val
33+
34+
if pre_m is None: #从1开始
35+
head = self.reverseList(head)
36+
newhead = head
37+
while(head.next):
38+
head = head.next
39+
head.next = nextn
40+
return newhead
41+
else:
42+
pre_m.next = self.reverseList(pre_m.next)
43+
newhead = head
44+
while(head.next):
45+
head = head.next
46+
head.next = nextn
47+
return newhead
48+
49+
50+
51+
52+
53+
def reverseList(self, head):
54+
"""
55+
:type head: ListNode
56+
:rtype: ListNode
57+
"""
58+
if head is None or head.next is None:
59+
return head
60+
tmp = self.reverseList(head.next)
61+
head.next.next = head
62+
head.next = None
63+
return tmp
+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution(object):
2+
def minCostII(self, costs):
3+
"""
4+
:type costs: List[List[int]]
5+
:rtype: int
6+
"""
7+
if not costs or not costs[0]:
8+
return 0
9+
dp = costs
10+
11+
def GetMin(idx, k):
12+
Min = max(costs[idx])
13+
for i, cost in enumerate(costs[idx]):
14+
if i == k:
15+
continue
16+
Min = min(Min, cost)
17+
return Min
18+
19+
for i in range(1, len(costs)):
20+
for k in range(len(costs[i])):
21+
dp[i][k] += GetMin(i - 1, k)
22+
return min(dp[-1])
23+
+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution(object):
2+
def findLonelyPixel(self, picture):
3+
"""
4+
:type picture: List[List[str]]
5+
:rtype: int
6+
"""
7+
if not picture or not picture[0]:
8+
return 0
9+
m, n = len(picture), len(picture[0])
10+
res = 0
11+
12+
def check(x0, y0):
13+
for x in range(0, m): #ͬһÁÐ
14+
if picture[x][y0] == "B" and x != x0:
15+
return False
16+
for y in range(0, n): #ͬһÐÐ
17+
if picture[x0][y] == "B" and y != y0:
18+
return False
19+
return True
20+
21+
for i in range(m):
22+
for j in range(n):
23+
if picture[i][j] == "B" and check(i, j):
24+
res += 1
25+
return res

0 commit comments

Comments
 (0)