題目要求:
找出給定數組中兩個元素和剛好等於給定目標值的最小下標,時間複雜度要求O(n)
例如:
輸入數組 [5, 4, 6, 7, 8, 11], 目標值 19
返回 4,5;
所有代碼均可在Github中找到:
# -*- coding:utf-8 -*-
__author__ = 'yangxin_ryan'
"""
Question:
給定一組無序數組,和一個目標值,我們要找出數組中兩個數中和剛好等於目標值的最小的下標;
要求時間複雜度是 O(n);
Solutions:
步驟一:這裏我使用的是Hash的方式, 首先我們把給出的數組按照Hash的方式存入Hash列表(表)。
key是元素,Value數組元素下標;
步驟二:我們去遍歷給定的輸入數組 list_num,並判斷,(target - 數組元素) 的結果是否在的Hash表中;
如果存在的話說明hash的value不是-1,找到後break出循環,我們可以返回最小的下標;
步驟一和步驟二的時間複雜度分別是O(n);
"""
class SumNumber(object):
def sum_number(self, list_num, target):
result = list()
hash_list = [-1] * (max(max(list_num), target) + 1)
for i in range(len(list_num)):
if hash_list[list_num[i]] == -1:
hash_list[list_num[i]] = i
elif hash_list[list_num[i]] > i:
hash_list[list_num