最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python三數(shù)之和的實(shí)現(xiàn)方式

 更新時(shí)間:2022年05月11日 10:30:19   作者:每天收獲一點(diǎn)點(diǎn)  
這篇文章主要介紹了Python三數(shù)之和的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

三數(shù)之和題目描述

給你一個(gè)包含 n 個(gè)整數(shù)的數(shù)組 nums,判斷 nums 中是否存在三個(gè)元素 a,b,c ,

使得 a + b + c = 0 ?請(qǐng)你找出所有滿足條件且不重復(fù)的三元組。

答案中不允許包含重復(fù)的三元組。

示例:

給定數(shù)組 nums = [-1, 0, 1, 2, -1, -4],

滿足要求的三元組集合為:

[
? [-1, 0, 1],
? [-1, -1, 2]
]

思路

1. 首先將數(shù)組排序,可以利用Python內(nèi)置函數(shù),也可以利用另外定義排序算法。

2. 應(yīng)用雙指針?biāo)惴?。固定第一個(gè)數(shù),索引為i,遍歷整個(gè)數(shù)組,第一個(gè)數(shù)也是三個(gè)數(shù)中最小的數(shù),然后在該數(shù)右面設(shè)置左右兩個(gè)指針l和r,l=i+1,r=len(nums)-1,

3. 判斷這三個(gè)索引指向的元素和與0的大小關(guān)系。

和>0,右指針左移一位;和<0,左指針右移一位。

由于要避免重復(fù)的三元組,所以移動(dòng)左右指針的時(shí)候要跳過相鄰的所有相等的nums[i]。

Python3代碼

#導(dǎo)入計(jì)算時(shí)間的包,調(diào)用系統(tǒng)時(shí)間
from time import * 
#初始時(shí)間
t1 = time()
def threeSum(nums):
    nums.sort()
    n = len(nums)
    res = []
    for i in range(n):
        '''如果相鄰的兩個(gè)數(shù)相等,跳過,避免重復(fù)'''
        if i > 0 and nums[i] == nums[i-1]:
            continue 
        l, r = i+1, n-1
        while l < r:
            if nums[i] + nums[l] + nums[r]>0:
                r -= 1
                while nums[r+1] == nums[r]:
                    r -= 1
            elif nums[i] + nums[l] + nums[r]<0:
                l += 1
                while nums[l-1] == nums[l]:
                    l += 1    
            else:
                res.append([nums[i],nums[l],nums[r]])
                l += 1
                r -= 1
                while nums[l] == nums[l - 1]: l += 1
                while nums[r] == nums[r + 1]: r -= 1
    return res
        
if __name__ == '__main__':
    nums = [-1,0,1,2,-1,-4]
    print(threeSum(nums))
#結(jié)束時(shí)間
t2 = time()
#運(yùn)行時(shí)間
run_time = t2 - t1
print(run_time)

運(yùn)行結(jié)果:

[[-1, -1, 2], [-1, 0, 1]]
#運(yùn)行時(shí)間
0.0010113716125488281

以上代碼有一些思想錯(cuò)誤:

遺漏了如果三個(gè)數(shù)全部大于0,則退出循環(huán),因?yàn)闆]有滿足條件的結(jié)果。

沒有嚴(yán)格判斷每一次的l<r的條件。

修正后的代碼:

from time import * 
t1 = time()
def threeSum(nums):
    nums.sort()
    n = len(nums)
    res = []
    for i in range(n-2):
        if nums[i] > 0:break
        '''如果相鄰的兩個(gè)數(shù)相等,跳過,避免重復(fù)'''
        if i > 0 and nums[i] == nums[i-1]:
            continue 
        l, r = i+1, n-1
        while l < r:
            if nums[i] + nums[l] + nums[r]>0:
                r -= 1
                while l < r and nums[r-1] == nums[r]:
                    r -= 1
            elif nums[i] + nums[l] + nums[r]<0:
                l += 1
                while l < r and nums[l] == nums[l-1]:
                    l += 1    
            else:
                res.append([nums[i],nums[l],nums[r]])
                l += 1
                r -= 1
                while l < r and nums[l] == nums[l - 1]: l += 1
                while l < r and nums[r] == nums[r + 1]: r -= 1
    return res
        
if __name__ == '__main__':
    nums = [-2,-3,0,0,-2]
    print(threeSum(nums))
t2 = time()
run_time = t2 - t1
print(run_time)

結(jié)果:

[]
#時(shí)間
0.0

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python為Excel單元格設(shè)置填充\背景色的操作方法(純色、漸變、圖案)

    Python為Excel單元格設(shè)置填充\背景色的操作方法(純色、漸變、圖案)

    在使用Excel進(jìn)行數(shù)據(jù)處理和分析時(shí),對(duì)特定單元格進(jìn)行背景顏色填充不僅能夠提升工作表的視覺吸引力,還能幫助用戶快速識(shí)別和區(qū)分不同類別的數(shù)據(jù),本文將通過三個(gè)示例詳細(xì)介紹如何使用Python在Excel中設(shè)置不同的單元格背景,需要的朋友可以參考下
    2024-08-08
  • 關(guān)于numpy數(shù)組軸的使用詳解

    關(guān)于numpy數(shù)組軸的使用詳解

    今天小編就為大家分享一篇關(guān)于numpy數(shù)組軸的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python讀取CSV文件的四種方法總結(jié)

    Python讀取CSV文件的四種方法總結(jié)

    這篇文章主要介紹了Python讀取CSV文件的四種方法, 使用 csv 模塊,使用 numpy 庫,使用pandas庫,使用標(biāo)準(zhǔn)庫中的 csv 模塊這四種方法,文章通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • python dir函數(shù)快速掌握用法技巧

    python dir函數(shù)快速掌握用法技巧

    在本篇文章里小編給大家整理的是一篇關(guān)于python dir函數(shù)快速掌握用法技巧,有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-12-12
  • Python制作個(gè)性化的詞云圖實(shí)例講解

    Python制作個(gè)性化的詞云圖實(shí)例講解

    大家好,本篇文章主要講的是Python制作個(gè)性化的詞云圖實(shí)例講解,感興趣的同學(xué)趕緊來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • 使用Python對(duì)文件進(jìn)行批量改名的方法

    使用Python對(duì)文件進(jìn)行批量改名的方法

    這篇文章主要介紹了使用Python對(duì)文件進(jìn)行批量改名的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Python Selenium常見的報(bào)錯(cuò)問題以及措施

    Python Selenium常見的報(bào)錯(cuò)問題以及措施

    這篇文章主要介紹了Python Selenium常見的報(bào)錯(cuò)問題以及措施,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 淺析python,PyCharm,Anaconda三者之間的關(guān)系

    淺析python,PyCharm,Anaconda三者之間的關(guān)系

    Python是一種跨平臺(tái)的計(jì)算機(jī)程序設(shè)計(jì)語言,簡(jiǎn)單來說,python就是類似于C,Java,C++等,一種編程語言。這篇文章主要介紹了淺析python,PyCharm,Anaconda三者之間的關(guān)系,需要的朋友可以參考下
    2019-11-11
  • 詳解Python list和numpy array的存儲(chǔ)和讀取方法

    詳解Python list和numpy array的存儲(chǔ)和讀取方法

    這篇文章主要介紹了詳解Python list和numpy array的存儲(chǔ)和讀取方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Python中SOAP項(xiàng)目的介紹及其在web開發(fā)中的應(yīng)用

    Python中SOAP項(xiàng)目的介紹及其在web開發(fā)中的應(yīng)用

    這篇文章主要介紹了Python中的SOAP項(xiàng)目及其在web開發(fā)中的應(yīng)用,本文來自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

神木县| 乡宁县| 横峰县| 大竹县| 洛扎县| 山阳县| 凤庆县| 徐州市| 筠连县| 新巴尔虎左旗| 嵊泗县| 故城县| 德阳市| 河东区| 洛阳市| 梅州市| 晋中市| 宜丰县| 宜阳县| 海阳市| 水城县| 内江市| 左贡县| 咸丰县| 长宁县| 遵义县| 信宜市| 金溪县| 突泉县| 普安县| 会昌县| 松桃| 云龙县| 邹平县| 都匀市| 安丘市| 张家口市| 富平县| 瓦房店市| 沁水县| 荣昌县|