三个笔试题

 1、手写排序算法

loop_count =  0
def f1():
'''手写冒泡排序
  1、元素之间两两比较;大的在前,小的在后
  2、重复第一个步骤 
    问题:要循环几次的比较?
'''
    l = [13,5,16,8,2,14,21,0,9]#O(n2)
    loop_count =  0
    for j in range(len(l)):
        for i in range(len(l)-1 - j ):
            loop_count+=1
            a , b = l[i] , l[i+1]
            if a >= b:
                pass
            else:
                l[i] , l[i+1] = b , a 
    print(f'一共循环了{loop_count }次')               
   # l.sort(reverse=True) #python自带的排序
   # retrun l
print(f1())

 快速排序 ---时间复杂度低

 冒泡排序 ----空间复杂度低

 插入排序。。。。

算法复杂度:时间复杂度 空间复杂度

2、找出重复次数最多的元素

def f2():
    """思路:
    1、统计各个元素出现的次数
    2、对结果排序,取最大值
    """
    l = [1, 2, 3, 4, 5, 6, 7, 1, 1, 1, 1, 3, 4, 5, 5, 6, 7, 8, 9, 90, 6]
    d = {}  # 统计各个元素出现的次数
    for i in l:
        d.setdefault(i, 0)
        d[i] += 1
    new_l = list(d.items())
    new_l.sort(key=lambda x: x[1])
    print(new_l)
    return new_l[-1][-1]

f2()

3、有一个期望的json串,如何用算法写出实际返回的json串与期望的json串中所有不同的key跟value

def f3():
    """
    思路:
    1、预期和实际是否相等?
    2、能不能找到具体不同的key
    3、能不能根据key找到value
    :return:
    json定义是什么?
    [1,2,3,4]是json?
    [1,2,3,4,[1,2,3,34]]是json?
    {"name": "kally", "age": {"name": "kally", "age": 21}}
    """
    json_1 = """{"name": "kally", "age": 21} """  # 期望
    json_2 = """ { "age": 21,"name": "libaobao"} """  # 实际
    # 字符串对比不科学,位置调换,就会有问题
    # assert json_1 == json_2
    # 先转成字典 字典本质 map
    json_1_obj = json.loads(json_1)
    json_2_obj = json.loads(json_2)
    # 断言方式判断
    # assert json_1_obj == json_2_obj
    # 先做类型判断,坑在类型判段这里!!!!!!!!
    for key in json_1_obj:
        if json_1_obj[key] != json_2_obj[key]:
            print(key, ":", json_2_obj[key])


f3()

Guess you like

Origin blog.csdn.net/weixin_38249775/article/details/121730975