lintcode入门篇三

一. 两数之和

给一个整数数组,找到两个数使得他们的和等于一个给定的数 target

你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0 到 n-1

样例

Example1:
给出 numbers = [2, 7, 11, 15], target = 9, 返回 [0, 1].
Example2:
给出 numbers = [15, 2, 7, 11], target = 9, 返回 [1, 2].

挑战

Either of the following solutions are acceptable:

  • O(n) Space, O(nlogn) Time
  • O(n) Space, O(n) Time

注意事项

你可以假设只有一组答案。

第一种解法:

class Solution:
    """
    @param numbers: An array of Integer
    @param target: target = numbers[index1] + numbers[index2]
    @return: [index1, index2] (index1 < index2)
    """
    def twoSum(self, numbers, target):
        # write your code here
        array = []
        for i in range(len(numbers)):
            for j in range(i + 1,len(numbers)):
                if numbers[i] + numbers[j] == target:
                    return [i,j]

第二种解法:

class Solution:
    """
    @param numbers: An array of Integer
    @param target: target = numbers[index1] + numbers[index2]
    @return: [index1, index2] (index1 < index2)
    """
    def twoSum(self, numbers, target):
        # write your code here
        for i in range(len(numbers)):
            s = target - numbers[i]
            if s in numbers and numbers.index(s) != i:
                if numbers.index(s) > i:
                    return [i,numbers.index(s)]
                else:
                    return [numbers.index(s),i]

二. 搜索插入位置

中文 English

给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。

你可以假设在数组中无重复元素。

样例

[1,3,5,6],5 → 2

[1,3,5,6],2 → 1

[1,3,5,6], 7 → 4

[1,3,5,6],0 → 0

挑战

时间复杂度为O(log(n))

class Solution:
    """
    @param A: an integer sorted array
    @param target: an integer to be inserted
    @return: An integer
    """
    def searchInsert(self, A, target):
        # write your code here
        if target in A:
            return A.index(target)
        else:
            for i in range(len(A)):
                if A[i] > target:
                    return i
            return len(A)

注释:

1.如果target在A数组里面,返回index。

2.如果不在A数组里面,则返回插入数组的位置。if A[i] > target >> return i,否则的话,说明是比A数组全部的值都大,则插入到A数组最后一个位置,即len(A)。

猜你喜欢

转载自www.cnblogs.com/yunxintryyoubest/p/12181738.html