演算法 我的第一道演算法題

2022-06-24 20:03:11 字數 2525 閱讀 2840

第一次刷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...