那些测试面试中常被问到的算法题

下文是我面试过程中遇到的算法题,可以给大家做个参考,如果有其他常见算法题可以评论下来,我会及时补充更新.

arr = [7, 11, 2, 13, 4, 32, 12, 1, 3, 5, 66, 37, 8, 6]
s = '1213asdasd1123ssaaa'

def case1():
    # 冒泡排序
    pass


def case2():
    # 二分之一查找
    pass


def case3():
    # 找出列表里那两个值相加=k,打印下标
    pass


def case4():
    # 判断是否是回文
    pass


def case5():
    # 找出字符串中重复的字符串,并记录重复的次数
    pass


def case6():
    # 找出字符串中重复的字符串,并记录重复的次数
    pass


def case7():
    # 随机去掉列表里任意一个数字,打印出去掉了几个,去掉的是什么
    pass


def case8():
    # 取出任意一个数,拼接上5,把5拼接到那个位置得到的数最大
    pass


def case9():
    # 两个列表下标的值相加,生成一个新的列表,下标不足的保留原来的值
    pass


def case10():
    # 替换字符串里的任意字符为指定的值
    pass


def case11():
    # 替换列表里的值
    pass


def case12(money=100, nums=10):
    # 微信红包
    import random
    pass


def case13():
    # 九九乘法表
    pass


def case14():
    # 打印出1234中互不相同切无重复的三位数
    pass


def case15(date: str):
    # 给你一个字符串 `date` ,按 `YYYY-MM-DD` ,返回该日期是当年的第几天。
    pass

def case16():
    # 两个字符串 S 和 T,求 S 中包含 T 所有字符的最短连续子串的长度。
    s = 'ADOBECODEBA1NC1BA'
    t = 'ABC'
    pass


冒泡排序

def case1():
    arr = [11, 2, 13, 32, 12, 1, 5, 66, 37, 8]
    for i in range(len(arr)):
        for j in range(len(arr)-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    print(arr)

二分之一查找

def case2():
    arr = [1,2,3,5,8,11,12,17,22,25,30]  # 生成列表
    k = 22
    l = 0
    r = len(arr) -1

    while l <= r:
        mid = (l + r) // 2
        if arr[mid] == k:
            print(mid)
            return
        elif arr[mid] > k:
            r = mid -1
        else:
            l = mid +1
    print('没有找到')

找出列表里那两个值相加=k,打印下标

def case3():
    arr = [1, 7, 5, 22, 13, 8, 4, 6, 2, 3, 8, 10, 0]
    k = 7
    for i in range(len(arr)):
        for j in range(i+1,len(arr)):
            if arr[i] + arr[j] == k:
                print(i,j)

判断是否是回文

def case4(x):
    if str(x)[::-1] == str(x):
        print('yes')
    else:
        print('no')

找出字符串中重复的字符串,并记录重复的次数

def case5():
    s = "adaaaadd11111"
    ss = list(set(s))  # 获取一个无序的集合,再转成列表
    ss.sort(key=s.index)  # 给列表排序
    for i in ss:
        k = s.count(i)   # 找到重复的记录重复次数
        print(i,k)

找出字符串中重复的字符串,并记录重复的次数

def case6():
    # 字符串去重
    s = "adaaaadd11111"
    s1 = ''
    for i in range(len(s)):
        if s[i] not in s1:
            s1 += s[i]

    # 拿到去重的字符串计算出现的次数
    for i in s1:
        k = s.count(i)
        print(i,k)

随机去掉列表里任意一个数字,打印出去掉了几个,去掉的是什么

def case7():
    # 随机去掉列表里任意一个数字,打印出去掉了几个,去掉的是什么
    list1 = [2,3,4,5,1,22,5,3,4,46]
    list2 = [3,4,5,1,22,3,4]
    for i in range(len(list1)):
        try:
            if list1[i] != list2[i]:
                list2.insert(i,None)
                print(list1[i])
        except IndexError:
            print(list1[i])
            list2.append(None)
    print(list2)

取出任意一个数,拼接上5,把5拼接到那个位置得到的数最大

def case8():
    i = -1516
    key = list(str(abs(i)))
    list2 = []
    for i in range(len(key)+1):
        list1 = key.copy()
        list1.insert(i, '5')
        s = ''.join(list1)
        list2.append(int(s))
    if i < 0:
        print(max(list2))
    else:
        print(-min(list2))

两个列表下标的值相加,生成一个新的列表,下标不足的保留原来的值

def case9():
    arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
    arr2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    for i in range(len(arr1) - len(arr2)):
        arr2.append(0)
    result_list = list(map(lambda x,y: x+y, arr1,arr2))
    print(result_list)
case9()

替换字符串里的任意字符为指定的值

def case10():
    str1 = 'aaaccnbabc'
    print(str1.replace('a', '*'))

替换列表里的值

def case11():
    list1 = ['a', 'a', 'a', 'c', 'c', 'n', 'b', 'a', 'b', 'c']
    while 'a' in list1:
        i = list1.index('a')
        list1[i] = '*'
    print(list1)

微信红包

def case12(money, nums=10):
    # 微信红包
    import random
    money *= 100
    list1 = []
    for i in range(nums-1,0,-1):
        key = money - i  # 保证后面最少能拿到0.01
        ren = random.randint(1,key)   # 随机整数,避免小数因精度问题导致数值有极小的差异
        money -= ren
        list1.append(ren / 100)
    list1.append(money/100)
    print(list1)
    print('手气最佳:', max(list1))

九九乘法表

    def case13(self):
        for i in range(1, 10):
            for j in range(1, i+1):
                print('{}*{}={}'.format(j, i, i*j), end=' ')
            print()

打印出1,2,3,4互不相同且无重复的三位数字

def case14(self):
# 打印出1234中互不相同且无重复的三位数
    for i in range(1, 5):
        for j in range(1, 5):
            for k in range(1, 5):
                if i != j and i != k and j != k:
                    print("{}{}{}".format(i,j,k))

给你一个字符串date,按YYYY-MM-DD,返回该日期是当年的第几天。

def case15(date:  str) -> int:
    year, month, day = [int(x) for x in date.split("-")]

    amount = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
        amount[1] += 1

    ans = sum(amount[:month - 1])
    print(ans + day)
    return ans + day

两个字符串 S 和 T,求 S 中包含 T 所有字符的最短连续子串的长度。

def case16():
    # 两个字符串 s 和 t,求 s 中包含 t 所有字符的最短连续子串的长度。
    s = 'ADOBECODEBA1NC1BA'
    t = 'ABC'
    check_len = len(t)
    for i in range(check_len, len(s) + 1):
        for j in range(i, len(s) + 1):
            key = s[j - i:j]
            if len([True for k in t if k in key]) == check_len:
                return key
print(case16())
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容