第一次刷leetcode 的演算法題.超時了,要換方法.
題目: 兩數之和
注意題目要求
:返回[0,1] 這種形式的。
暴力法求解兩數之和
,當陣列內的元素過多時,該演算法執行超時。
給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。
deftwosum( nums, target):
l=len(nums)
foriinrange(l):
forjinrange(i+1,l):
a1=nums[i]
a2=nums[j]
ifa1+a2==target:
print([i,j])
nums=[2,7,11,15]
target=9
twosum(nums,target)
演算法分析:
演算法複雜度為 o(l×(
l-1))
= o(
l*l)
引申閱讀:演算法的複雜度
) = o(f
(n) 則 f(
n)是t(
n)的上界。
要點:空間複雜度。
通常來說,只要演算法不涉及到動態分配的空間,以及遞迴、棧所需的空間,空間複雜度通常為0(1);
時間複雜度。
對順序執行的程式,總的時間複雜度等於其中最大的複雜度。如:
for( i = 0; i < n ; i ++)
此時的複雜度為 max( o(
n^2),o(n) )
也即 o(n^2)
對於條件判斷語句,總的時間複雜度等於其中
時間複雜度最大的
路徑的時間複雜度 . if else 則最大複雜度為 o(
n×n)
高階題目:
void func (int n)
}假設迴圈次數為t, 則
2^t (2)(
n) ,時間複雜度為 o(
log(
n) 預設以
2為底。
方法二:
#思路#將 target - nums[i] 作為key ,和下標 i 作為 value存到字典p當中.
#如果在nums【i】 裡發現和
字典p裡的 key 相同的值,則返回字典的 p[nums[i]],
建立了乙個新的字典p 雜湊演算法 時間複雜度 o(
n)classsolution:
deftwosum(self, nums, target):
p=
foriinrange(len(nums)):
ifnums[i]inp:
return[p[nums[i]], i]
else:
p[target-nums[i]]=i
if__name__=='__main__':
nums=[2,7,11,15]
target=9
so=solution()
print(so.twosum(nums,target))
一道演算法題
兩個燒杯,乙個放糖乙個放鹽,用勺子舀一勺糖到鹽,攪拌均勻,然後舀一勺混合 物會放糖的燒杯,問你兩個燒杯哪個雜質多?一樣多吧 對的 為啥?是不是因為 糖和鹽本來就是均勻的 因為,就算不攪拌均,你放一勺過去,那邊放一勺不含雜質的過來,那麼都是一勺雜之 如果攪拌均勻的話也是一樣 小依 21 45 32 也...
一道演算法題
1.上午主要做了對翻譯任務的劃分,下午把 翻譯完畢。2.明天要講的演算法題 對乙個集合,求出其連續元素組成的子集中,和最大的子集 我對這道題的理解是 1 若集合中最小值大於0,意味著所有的都大於0,則最大的子集和,為所有值加起來 2 若集合中最大值小於0,意味著所有的都小於0,則最大的子集和,為集合...
一道演算法題
include using namespace std const int size 5 int max sub array const int a,int n,int m int max matrix const int a size int row,int col,int subsize int...