zoukankan      html  css  js  c++  java
  • leetcode 刷题day1

    1、

    enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

    Python 2.3. 以上版本可用,2.6 添加 start 参数。

    enumerate(sequence, [start=0])
    >>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
    >>> list(enumerate(seasons))
    [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
    >>> list(enumerate(seasons, start=1))       # 下标从 1 开始
    [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

    bin() 返回一个整数 int 或者长整数 long int 的二进制表示。

    >>>bin(10)
    '0b1010'
    >>> bin(20)
    '0b10100'

    在集合中,创建空集合(set)必须使用函数set()。

    #创建集合
    >>>a={'a','b','c','d'}
    >>>b=set('abcdefabcd')
    >>>c=set({'a':1,'b':2,'c':3})
    >>>d=set(['a','b','c','a'])
    #运行结果
    >>>print(a,type(a))
    {'c', 'd', 'b', 'a'} <class 'set'>
    >>>print(b,type(b))
    {'f', 'e', 'b', 'c', 'd', 'a'} <class 'set'>
    >>>print(c,type(c))
    {'b', 'a','c'} <class 'set'>
    >>>print(d,type(d))
    {'c', 'b', 'a'} <class 'set'>

    Python find() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1

    语法

    find()方法语法:

    str.find(str, beg=0, end=len(string))

    参数

    • str -- 指定检索的字符串
    • beg -- 开始索引,默认为0。
    • end -- 结束索引,默认为字符串的长度。

    利用牛顿迭代法计算开平方根

    牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根。另外该方法广泛用于计算机编程中。

     设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。

    过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r的二次近似值。重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。

    这种算法的原理很简单,我们仅仅是不断用(x,f(x))的切线来逼近方程x^2-a=0的根。根号a实际上就是x^2-a=0的一个正实根,这个函数的导数是2x。也就是说,函数上任一点(x,f(x))处的切线斜率是2x。那么,x-f(x)/(2x)就是一个比x更接近的近似值。代入f(x)=x^2-a得到x-(x^2-a)/(2x),也就是(x+a/x)/2。

    double sqr(double n) { 
        double k=1.0; 
        while(abs(k*k-n)>1e-9) { 
            k=(k+n/k)/2; 
        } 
        return k; 
    }

    python两种让你拍大腿的解法,时间复杂度你想象不到,短小精悍。 1、利用python的max()和min(),在Python里字符串是可以比较的,按照ascII值排,举例abb, aba,abac,最大为abb,最小为aba。所以只需要比较最大最小的公共前缀就是整个数组的公共前缀

        def longestCommonPrefix(self, strs):
            if not strs: return ""
            s1 = min(strs)
            s2 = max(strs)
            for i,x in enumerate(s1):
                if x != s2[i]:
                    return s2[:i]
            return s1
    

    2、利用python的zip函数,把str看成list然后把输入看成二维数组,左对齐纵向压缩,然后把每项利用集合去重,之后遍历list中找到元素长度大于1之前的就是公共前缀

        def longestCommonPrefix(self, strs):
            if not strs: return ""
            ss = list(map(set, zip(*strs)))
            res = ""
            for i, x in enumerate(ss):
                x = list(x)
                if len(x) > 1:
                    break
                res = res + x[0]
            return res
  • 相关阅读:
    mtd
    .NET快速开发框架-RDIFramework.NET 全新EasyUI版发布
    EntityFramework Core 5.0 VS SQLBulkCopy
    动态拼接Lambda表达式-表达式目录树动态构建及修改-----表达式树的访问过程,并转化成sql语句
    动态拼接Lambda表达式-表达式目录树动态构建及修改
    动态拼接Lambda表达式-表达式目录树动态构建 And Or Not True False等表达式树的扩展
    动态拼接Lambda表达式-表达式目录树动态构建=Expression<Func<MyClass, int>> expressionFunc = x => x.Age + 1
    动态拼接Lambda表达式-表达式目录树动态构建=Expression<Func<int, int, int>> predicate1 = (m, n) => m * n + 2
    动态拼接Lambda表达式2
    lambda 表达式拼接
  • 原文地址:https://www.cnblogs.com/xxupup/p/10721930.html
Copyright © 2011-2022 走看看