給定乙個陣列,乙個目標值。假定剛好有兩個數字加起來為目標值,請返回這兩個下標(e.g. list=[1,2,3,0], target=4,返回 [0, 2])
思路:
def
twosum
(self, nums, target):
""" :type nums: list[int]
:type target: int
:rtype: list[int]
"""#拷貝陣列
numlist = nums[:]
#陣列排序
numlist.sort()
#核心部分,分別設定左右兩個指標,若此時指標所指數字和超過target,則右指標向左移,找更小的數字,同理若超過target,則左指標右移,找更大的數字,直至找到目標值
l = 0
r = len(nums) - 1
while (numlist[l]+numlist[r]) != target:
while (numlist[l]+numlist[r]) < target:
l = l + 1
while (numlist[l]+numlist[r]) > target:
r = r - 1
#找到相應數字在原陣列中的下標誌
i = nums.index(numlist[l])
j = nums.index(numlist[r])
#應對兩個數字剛好相等的情況(e.g. [0,1,2,0], target=0 應返回[0,3], 若不做檢查 則會返回[0,0]是錯誤的)
if (j == i):
j = nums.index(numlist[l], i+1)
return [i, j]
def
multi
():return [lambda x: x * y for y in range(3)]
for m in multi():
pirnt (m(2))
#print 44
4
def
arg(val, lst=):
return lst
print (arg(10))
print (arg(20))
#print
[10]
[10, 20]
lst = * 3 #[, , ]
print (lst) #[[2], [2], [2]]
快排思想
->
->
-> |
-> |
-> |
-> |
-> |
思想就是單次排序後,使陣列分為兩部分,左半部分均小於flag值,右半部分均大於flag值,然後兩半部分再迭代進行單次排序
直接上實現**:
#單次排序
def quick(lst, left, right):
flag = lst[left]
while (left
< right):
while (lst[right] > flag):
right = right - 1
if (left
< right):
tmp = lst[right]
lst[right] = lst[left]
lst[left] = tmp
left = left + 1
while (lst[left] < flag):
left = left + 1
if (left
< right):
tmp = lst[left]
lst[left] = lst[right]
lst[right] = tmp
right = right - 1
return left
#遞迴部分
def quicksort(lst, left, right):
if (left >= right):
return
else:
mid = quick(lst, left, right)
quicksort(lst, left, mid)
quicksort(lst, mid+1, right)
WIFI SDIO 五問五答
1 在sd.c的檔案中定義的host max mclk是怎麼定義的?197000000對應的clk為多少hz?具體的換算公式是怎麼樣的?修改這個clk會影響哪些效能?define host max mclk 197000000 197mhz 在定義最快跑多少 假設max clk 在50mhz 但如果...
每日一問2019 09 26
遍歷物件的方法 有4種。1 for in 2 object.keys foreach3 object.getownpropertynames foreach4 reflect.ownkeys foreach 遍歷物件的方法解析 for in for of區別 for in 遍歷的是鍵名 適合遍歷物件...
FPGA入門五問
fpga和cpu,gpu三者之間的區別?人工智慧的發展 5g 與 fpga 有什麼關聯?什麼驅動了fpga的發展?胡思亂想 彩蛋參考文章 暗矽效應指的是,雖然我們可以不斷增加處理器核心的數量,但是由於能耗限制,無法讓它們同時工作。就好像一幢大樓裡有很多房間,但由於功耗太大,你無法點亮每個房間的燈光,...