找出給定數組中兩個元素和剛好等於給定目標值的最小下標,時間複雜度要求O(n)

題目要求:

找出給定數組中兩個元素和剛好等於給定目標值的最小下標,時間複雜度要求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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章