zoukankan      html  css  js  c++  java
  • 常用算法题

    做牛客网题目的时候发现不少奇奇怪怪的用法:

    print(ord("a"))  # ascii嘛
    print(chr(ord("a") + 1))  # 转到下一位字母
    print("123".isdigit())  # 如果字符串只包含数字则返回 True 否则返回 False
    print("ddd".isalpha())  # 如果字符串只包含字母则返回 True 否则返回 False
    
    print(''.join(reversed("123")))  # 反转,reversed返回是一个迭代对象
    print(list(reversed([1, 2, 3])))
    
    print(sorted([3, 6, 2, 4], reverse=False))  # 排序,reverse默认是false,升序排列
    a = [{"name": "Taobao", "age": 100}, {"name": "Runoob", "age": 7},
         {"name": "Google", "age": 100}, {"name": "Wiki", "age": 200}]
    print(sorted(a, key=lambda i: i['name'], reverse=False))  # key是指排序规则,这里的i是a下面每个字典
    
    print(" sdsdkksdsew a".strip('a'))  # 移除字符串头尾指定的字符(默认为空格或换行符)或字符序列
    print([1, 2, 4, 5].pop(1))  # pop默认删除最后一位,可以删除指定位置
    
    print(bin(15))  # 10进制转换为2进制
    print(int("0xAA", base=16))  # 16进制转换为10进制(其他进制转化为10进制)

    1、冒泡排序和快速排序

    def maopaopaixu(a):
        for i in range(len(a) - 1):  # 这个循环负责设置冒泡排序进行的次数
            # 第一次排就能把最大的排到最后面,最后一个就不参与排序了
            # 第二次排需要的次数-1,能把第二大的排到倒数第二,倒数第二个就不参与排序了
            # 同理第三次、第四次
            for j in range(len(a) - i - 1):  # j为列表下标
                if a[j] > a[j + 1]:
                    a[j], a[j + 1] = a[j + 1], a[j]
        return a
    
    
    def quick_sort(data):
        """快速排序"""
        if len(data) >= 2:  # 递归入口及出口
            mid = data[len(data) // 2]  # 选取基准值,也可以选取第一个或最后一个元素(//取整除 - 返回商的整数部分(向下取整))
            left, right = [], []  # 定义基准值左右两侧的列表
            data.remove(mid)  # 从原始数组中移除基准值,如果不移除,list含有相同元素时则会陷入无限递归
            for num in data:
                if num >= mid:
                    right.append(num)
                else:
                    left.append(num)
            return quick_sort(left) + [mid] + quick_sort(right)
            # return quick_sort(left) + quick_sort(right)
        else:
            return data
    
    
    if __name__ == '__main__':
        a = [2, 1, 4, 5, 10, 11, 21, 34, 6, 6]
        print(maopaopaixu(a))
        print(quick_sort(a))

    2、阶乘

    def funa(a: int):
        if a < 1:
            print("数据错误")
            return
        if a == 1:
            return 1
        if a > 1:
            return a * funa(a - 1)
    
    
    def funb(a: int):
        l = 1
        for i in range(1, a + 1):
            l = l * i
        return l
    
    
    if __name__ == '__main__':
        print(funa(6))
        print(funb(6))

    3、反转

    def fanzhuan1(a):
        if isinstance(a, str):
            l = ''
            for i in range(len(a)):
                l = l + a[-(i + 1)]
            return l
        if isinstance(a, list):
            l = []
            for i in range(len(a)):
                l.append(a[-(i + 1)])
            return l
    
    
    def fanzhuan2(a):
        return a[::-1]
    
    
    if __name__ == '__main__':
        a = "ksjdkjsd"
        print(fanzhuan1(a))
        print(fanzhuan2(a))
        a = [1, 2, 3, 4, 5]
        print(fanzhuan1(a))
        print(fanzhuan2(a))

    4、数组移除元素,remove会删掉元素,导致后面的元素下标前移,实际上5和-6没有参与循环

    def dellist1(a: list):
        for i in a:
            if i < 0:
                a.remove(i)
        return a
    
    
    def dellist2(a: list):
        return [i for i in a if i > 0]
    
    
    if __name__ == '__main__':
        a = [1, 3, -3, 5, -4, -6, 10]
        print(dellist1(a))  # [1, 3, 5, -6, 10]
        print(dellist2(a))  # [1, 3, 5, 10]

    5、字符串统计

    str001 = "my love is you do you konw it ? do you love me ?"
    list001 = str001.split(' ')
    print(list001)
    print(str001.count(' '))
    print("单词的总数为%s" % (len(list001)))  # 14
    print("空格的总数为%s" % str001.count(' '))  # 13
    print("you的总数为%s" % (list001.count('you')))  # 3

     6、斐波拉契数列

    # 一般来说这个数列的入参是len
    # 0、1、1、2、3、5、8、13、21、34
    def feb(len: int):
        l = [0, 1]
        if len < 2:
            l = [0, 1]
        for i in range(len - 2):
            l.append(l[-1] + l[-2])
        return l
    
    
    def feb2(a):
        """这个只能取单个"""
        if a == 2:
            return 1
        if a == 1:
            return 0
        else:
            return feb2(a - 1) + feb2(a - 2)
    
    
    if __name__ == '__main__':
        print(feb(6))
        print(feb2(6))

     7、去重

    def mydemo(a):
        for i in a:
            len = a.count(i)
            while len > 1:
                a.remove(i)
                len = a.count(i)
        return a
    
    
    def setdemo(a):
        if isinstance(a, str):
            return ''.join(set(b))
        if isinstance(a, list):
            return list(set(a))
        if isinstance(a, tuple):
            return tuple(set(a))
    
    
    if __name__ == '__main__':
        a = [1, 2, 3, 1, 4, 6, 7, 3, 2]
        b = 'sjhdkshdksssd'
        c = (1, 2, 3, 1, 4, 6, 7, 3, 2)
        print(mydemo(a))
        print(setdemo(a))
        print(setdemo(b))
        print(setdemo(c))

     8、求质数,美团视频面试第一道题,就挂了,是我自己想的太简单

    # c=0
    # for i in range(101,201):
    #     d = 0
    #     for j in range(2,i):
    #         if i%j==0:
    #             d+=1
    #             break
    #     if d==0:
    #         c=c+1
    # 
    # print(c)
    
    
    c=0
    for i in range(101,201):
        for j in range(2,i):
            if i%j==0:
                break
        else:
            c=c+1
    
    print(c)

     for  else语句:当 for 所有的语句代码块正常运行完,才会运行 else 语句

    测试进阶轨迹
  • 相关阅读:
    DropDownList 禁止选择某一项
    C语言文件操作函数(ANSI)详解(二)
    c语言中break与continue的区别
    指针函数
    C语言文件操作函数(ANSI)详解(一)
    结构体指针
    ASCII\UNICODE编码的区别
    函数调用二维数组例子
    getchar()函数getch()函数区别
    C语言 二维数组做函数参数的几种情况
  • 原文地址:https://www.cnblogs.com/yinwenbin/p/14532809.html
Copyright © 2011-2022 走看看