lintcode入门篇三
Posted yunxintryyoubest
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)。
以上是关于lintcode入门篇三的主要内容,如果未能解决你的问题,请参考以下文章