1. 程式人生 > >我的第一道算法題

我的第一道算法題

新的 要點 分配 暴力 算法題 一道 ali lse 裏的

第一次刷leetcode 的算法題.超時了,要換方法.

題目: 兩數之和 註意題目要求 返回[0,1] 這種形式的。

暴力法求解兩數之和,當數組內的元素過多時,該算法運行超時。

給定一個整數數組和一個目標值,找出數組中和為目標值的兩個數。

def twoSum( nums, target):
L = len(nums)
for i in range(L):
for j in range(i+1,L):
a1=nums[i]
a2=nums[j]
if

a1+a2==target:
print([i,j])
nums = [2,7,11,15]
target = 9
twoSum(nums,target)

算法分析: 算法復雜度為 OL-1)) = OL*L

引申閱讀:算法的復雜度https://www.jianshu.com/p/f4cca5ce055a

Tn= Ofn) 則 fn)是Tn)的上界。

要點:

空間復雜度。

通常來說,只要算法不涉及到動態分配的空間,以及遞歸、棧所需的空間,空間復雜度通常為0(1)

時間復雜度。

對順序執行的程序,總的時間復雜度等於其中最大的復雜度。如:

For( i = 0; i < n ; i ++)

{ for ( j=0 ; j <n ; j++)}

For( j= 0; j < n ; j ++)

{jfiowejoi f}

此時的復雜度為 maxon^2),o(n) ) 也即 O(n^2)

對於條件判斷語句,總的時間復雜度等於其中 時間復雜度最大的 路徑 的時間復雜度 . if { n } else { n*n} 則最大復雜度為 On×n

進階題目:

Void func (int n) {

For ( i =2; i<n ; i++)

{

i*=2;

Printf()

}

}

假設循環次數為t, 則 2^t <n t=log2)(n) ,時間復雜度為 Ologn) 默認以2為底。

方法二:

#思路
#將 target - nums[i] 作為key ,和下標 i 作為 value存到字典p當中.
#如果在numsi】 裏發現和 字典p裏的 key 相同的值,則返回字典的 p[nums[i]],

建立了一個新的字典P 哈希算法 時間復雜度 On
class Solution:
def twoSum(self, nums, target):
p = { }
for i in range(len(nums)):
if nums[i] in p:
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))

我的第一道算法題