Python 알고리즘 문제 - 목록 에서 s 의 두 숫자 를 찾 습 니 다.
2658 단어 알고리즘python리스트화 해 를 구하 다
해법 1:
슈퍼 대순환
가장 생각 나 는 게 다 니 는 거 야.포 함 된 순환, 외부 순환 은 모든 목록 을 옮 겨 다 니 며, 내부 순환 은 현재 요소 의 위 치 를 옮 겨 다 니 는 모든 요 소 를 옮 겨 다 닙 니 다.내부 순환 에 두 숫자 를 더 하면 13 이면 break 이다.잘 찾 아.
def equalSum01(data=None, twosum=13):
result = []
for i, vi in enumerate(data):
if i + 1 > len(data) - 1:
break
for j, vj in enumerate(data[i+1:]):
if vi + vj == twosum:
print(vi, vj)
result.append((vi, vj))
break
return result
해법 2:
수미 덧셈
data 는 오름차 순 으로 배 열 된 목록 이기 때문에 우 리 는 두 개의 포인터 l, r 로 목록 의 양 끝 을 가리 킬 수 있 습 니 다. 그러면 data [l] + data [r] 의 것 과 세 가지 상황 이 있 습 니 다.
1. S 와 같 으 면 이 두 숫자 를 추가 한 결과 목록 에서 l 포인터 가 오른쪽으로 이동 하고 r 포인터 가 왼쪽으로 이동 합 니 다.
2. S 보다 작 으 면 l 포인 터 를 오른쪽으로 이동 합 니 다.
3. S 이상, r 포인터 왼쪽으로 이동
def equalSum02(data=None, twosum=13):
result = []
l = 0
r = len(data) - 1
while l < r:
if data[l] + data[r] == twosum:
result.append((data[l], data[r]))
l += 1
r -= 1
elif data[l] + data[r] < twosum:
l += 1
else:
r -= 1
return result
해법 3:
정확 한 검색 법
data, 기대 치 = S - data [i] 를 옮 겨 다 니 며 이 기대 치가 data [i] 오른쪽 에 있 는 나머지 목록 에서 찾 으 면 만 번 을 옮 겨 다 니 면 모든 것 을 찾 을 수 있 습 니 다.
def equalSum03(data=None, twosum=13):
result = []
for i, v in enumerate(data):
if (twosum - v) in data[i+1:]:
result.append((v, twosum - v))
return result
시간 복잡 도 에서 볼 때 해법 중 하 나 는 시간 복잡 도가 가장 큰 것 이다.해법 3 은 매번 순환 할 때마다 남 은 목록 을 검색 해 야 하기 때문에 해법 2 보다 커 야 한다.
유닛 테스트
import unittest
class TestInverseMethods(unittest.TestCase):
def test_equalSum01(self):
data = [1, 3, 4, 5, 8, 9, 11]
result = [(4, 9), (5, 8)]
self.assertEqual(equalSum01(data), result)
def test_equalSum02(self):
data = [1, 3, 4, 5, 8, 9, 11]
result = [(4, 9), (5, 8)]
self.assertEqual(equalSum02(data), result)
def test_equalSum03(self):
data = [1, 3, 4, 5, 8, 9, 11]
result = [(4, 9), (5, 8)]
self.assertEqual(equalSum03(data), result)
if __name__ == '__main__':
unittest.main()
...
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
(4, 9)
(5, 8)
==bingo==
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.