演算法思想 Day 01

2021-10-08 07:27:02 字數 3552 閱讀 4847

給定乙個整數陣列nums和乙個目標值target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。

你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。

給定 nums = [2, 7, 11, 15], target = 9

因為 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

思路一

​ 定義乙個索引i遍歷出nums中的元素,判斷列表中是否有符合target - nums[i]的值,有的話返回對應值的索引sums.index(target - sums[i])

class

solution()

:def

twosum

(self, nums, target)

:for i in

range

(len

(nums)):

if(target - nums[i]

)in nums:

j = nums.index(target-nums[i]

)if i == j:

# 判斷兩次索引是否代表同乙個值

continue

# 代表值相同 開始下一次迴圈

else

:return

[i, j]

# 返回結果

else

:# 值如果只不在sums裡 則開始下乙個迴圈

continue

# pass

思路二

​ 構建空字典,用去重的方法返回對應索引 # 列表同樣可以

class

solution

:def

twosum

(self, nums, target)

: dic =

# 構建乙個空字典用來儲存資料

lens =

len(nums)

# nums的長度

for i in

range

(lens)

:# 遍歷nums列表

if target - nums[i]

notin dic:

# 往空字典裡新增 target-nums[i]

dic[nums[i]

]= i # 第乙個 正確值 對應的 索引

else

:# 如果值已經存在 則返回第一次出現的 值的索引 和 當前索引

return

[dic[target - nums[i]

], i]

class

solution

:def

twosum

(self, nums, target)

: list1 =

lens =

len(nums)

for i in

range

(lens)

:if target-nums[i]

notin list1:

)else

:return

[list1.index(target-nums[i]

), i]

給定乙個非負整數c,你要判斷是否存在兩個整數ab,使得 a² + b² = c。

輸入: 5

輸出: true

解釋: 1 * 1 + 2 * 2 = 5

思路一

​ 根據勾股定理 a 和 b都是要小於 < c******0.5(根號c),首先兩個數必須要屬於這個非負整數,可以用兩個指標從0開始遍歷 非負整數, 乙個(0, c+1) 另乙個(i, c+1)

ps 兩個數可以重複 比如12

class

solution1

:# 好的超時了,我們換乙個 枯了....

defjudgesquaresum

(self, c)

:for i in

range(0

,int

(c**

0.5+1)

):for j in

range

(i,int

(c**

0.5+1)

):if i **

2+ j **

2== c:

return

true

思路二

​ 同理,a和b都小於根號c,首先遍歷(0, int(c0.5+1)),再判斷(c-i²)½ 的資料型別與 (c-i²)½ 是否相同

注意:這裡不能直接根據資料型別是不是整形來判斷,因為生成的result值是 float 整形也會以浮點型的方式表現出來 比如result == 1返回的是1.0

class

solution1

:def

judgesquaresum

(self, c)

:for i in

range(0

,int

(c**

0.5)+1

):result1 =

(c-i*i)

**0.5

print

(result1)

# 2.0

ifisinstance

(result1,

int)

==true

:return

true

result = solution1(

)print

(result.judgesquaresum(c=4)

)

class

solution1

:def

judgesquaresum

(self, c)

:for i in

range(0

,int

(c**

0.5)+1

):result1 =

(c-i*i)

**0.5

ifint

(result1)

==(c-i*i)

**0.5

:# if int((c-i*i)**0.5) == (c-i*i)**0.5:

return

true

if int(result1) == (c-i*i)**0.5:  # if int((c-i*i)**0.5) == (c-i*i)**0.5:

return true

演算法入門 day01

1 2019中,包含2 0 1 9的數的和 package 2019 author seh date 2020 12 23 9 22 version 1.0 1 2019中,包含2 0 1 9的數的和 boolean contains str 檢測字串內有無包含str的內容 public class...

python演算法每日練習day01

2.使用的是bfs 廣度優先遍歷 佇列 先進先出 完成的 題目 2,1,1 1,1,0 0,1,1 2 腐爛,1 新鮮,0 空 每分鐘任何與腐爛的橘子相鄰的新鮮橘子都會腐爛,返回直到單元格中沒有新鮮橘子為止所必須經過的最小分鐘數。如果不可能,返回 1,沒有新鮮橘子返回0 直接上 class solu...

學習筆記day01

作業系統簡稱 operating system 簡稱os 其的本質就是乙個軟體,作業系統對上可以管理應用程式,對下可以訪問硬體裝置。主流的作業系統 pc機領域 windows系列,ios,伺服器領域 linux系列,unix,windows server。手持裝置 ios,android,塞班,wi...