zoukankan      html  css  js  c++  java
  • 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)。

    三. 爬楼梯

    假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?

    样例

    Example 1:
    	Input:  n = 3
    	Output: 3
    	
    	Explanation:
    	1) 1, 1, 1
    	2) 1, 2
    	3) 2, 1
    	total 3.
    class Solution:
        """
        @param n: An integer
        @return: An integer
        """
        def climbStairs(self, n):
            # write your code here
            '''
            思路:
            1.如果n=0的话,则0种方法
            2.如果n>0的话
            n = 1  1
            n = 2  2
            n = 3  3 1+2
            n = 4  5 2+3
            n = 5  8 3+5
            如果是到第5级的话,一步到位的有两种可能,要么是从第4级上来,要么是从第3级上来。
            到第4级多少种方法 +  到第3级多少种方法  =  到第5级多少种方法
            即f(n) = f(n-1) + f(n-2)
            
            '''
            if n == 0:
                return 0
            a = 0
            b = 1
            for i in range(n):
                c = a + b
                a = b
                b = c
            return c

     

  • 相关阅读:
    C#中怎样将数组的顺序打乱随机排序
    C#中怎样获取System.Drawing.Color的所有颜色对象并存到数组中
    ZedGraph怎样实现将图形右键菜单的打印和页面设置合并为打印的二级子菜单
    C#中怎样在ToolStripMenuItem下再添加子级菜单
    Dubbo搭建HelloWorld-搭建服务提供者与服务消费者并完成远程调用(附代码下载)
    AndroidStudio下载安装教程(图文教程)
    Dubbo环境搭建-管理控制台dubbo-admin实现服务监控
    前端冷知识集锦
    console.log()显示图片以及为文字加样式
    vue数据请求显示loading图
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12181738.html
Copyright © 2011-2022 走看看