算法练习~第一天

# 1.寻找中数组中第二小的元素
def match_secend_min(arr):
    arr.sort()
    return arr[1] if len(arr) > 1 else ""
print(match_secend_min([5,5,5]))

# 2.找到数组中第一个不重复出现的整数
def match_fisrt_same(arr):
    cursor = arr[0]
    for i in range(1, len(arr)):
        if cursor!=arr[i]:
            return arr[i]
print("[2].", match_fisrt_same([1,1,1,1,1,3,"4", 4, 5,"a", "c", "c"]))

# 3.合并两个有序数组
def collection_arr(arr1, arr2):
    arr3 = arr1 + arr2
    arr3.sort()
    return arr3
print(collection_arr([6,7,8], [2,3,4]))

# 如何判断一个数组是对称数组:
# 要求:判断数组元素是否对称。例如[1,2,0,2,1],[1,2,3,3,2,1]这样的都是对称数组
def find_mirro(arr):
    if len(arr)%2 == 0:
        newarr = arr[int(len(arr) / 2):]
        newarr.reverse()
        for i, j in zip(arr[: int(len(arr)/2)], newarr):
            if arr[i] != arr[j]:
                return False
    else:
        newarr = arr[int((len(arr) + 1) / 2):]
        newarr.reverse()
        for i, j in zip(arr[: int((len(arr)-1)/2)], newarr):
            if arr[i] != arr[j]:
                return False
    return True
arr = [1,2,0,2,1]
print(find_mirro(arr))

# 冒泡算法(从小到大)
def mao_pao(arr):
    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]
    return arr
print(mao_pao([5,4,6,2,3,1,1]))

# !!!字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串 aabcccccaaa 会变为 a2b1c5a3 。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母
def yasuo(string):
    ys_str = ""
    num = 1
    cursor = string[0]
    for i in range(1, len(string)):
        if string[i] == cursor:
            num += 1
        else:
            ys_str = ys_str + str(cursor) + str(num)
            cursor = string[i]
            num = 1
    else:
        ys_str = ys_str + str(cursor) + str(num)
    yy = ys_str[1::2]
    if set(yy) == {"1"}:
        return string
    return ys_str
print(yasuo("abb979caa"))

# 一行代码通过filter和lambda函数输出以下列表索引为奇数对应的元素list_a =[12,213,22,2,2,2,22,2,2,2,32]
#[213,2,2,2,2]
list_a =[12,213,22,2,2,2,22,2,2,2,32]
a = [y for y in filter(lambda x: x[0]%2 == 1, [(key, value) for key, value in enumerate(list_a)])]
b = [value for index, value in enumerate(list_a) if index % 2 == 1]
print(a)
print(b)

# [1,2,3,4,5] 输出 [1,4.9,16,25]
print("map函数使用", list(map(lambda x: x**2, [1,2,3,4,5])))
print("sorted函数开始", list({"name": "lgq", "age": 18, "city": "深圳市", "tel": "134277"}.items()))
print("sorted函数使用", sorted({"name": "lgq", "age": 18, "city": "深圳市", "tel": "134277"}.items(), key=lambda i: i[0], reverse=False))

# 1,2,3,4,5能够组成多少个互不相同的无重复的四位数
a = [1, 2, 3, 4, 5]
fit_list = []
for i in range(1000, 10000):
    if len(set(str(i))) != 4:
        continue
    for j in str(i):
        if int(j) not in a:
            break
    else:
        fit_list.append(i)
print("--", len(fit_list))

# 集合运算
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print("差集", set1 - set2)
print("交集", set1 & set2)
print("并集", set1 | set2)
print("对称差集", set1 ^ set2)

# 如何生使用一行代码实现生成【1,4,9,16,25,36,49,64,81,100】
a = [i**2 for i in range(1, 11)]
print("-", a)

'''请尽量用简洁的方法把二维数组转换成一维数组例如:
转换前
lst = [[1,2,3],[4,5,6],[7,8,9]]转换后
lst =[1,2,3,4,5,6,7,8,9]
'''
lst = [[1,2,3],[4,5,6],[7,8,9]]
a = []
c = [a.extend(i) for i in lst]
print("x", a)
lst2 = sum(lst, [])
print("x", lst2)

# [1,1,2,3,5,8,13]
def fblq(range_int):
    pre = 1
    cur = 0
    for i in range(1, range_int):
        pre, cur = cur, pre + cur
        yield cur
print(list(fblq(10)))

# sys.getrefcount( )函数可以获得对象的当前引用计数
import sys
print("引用计数", sys.getrefcount(a))
print(list("1234567890"[0:5:2]))

import re
string = "test123456"
pattern = "(.*?)"
result = re.search(pattern, string)
print(result.group())

# 找出两个字符串最大相同的
# adb12345eed
# tyadt345tytr
def match_max(str1, str2):
    cursor = 0
    max_str = ""
    if len(str1) > len(str2):
        str1, str2 = str2, str1
    for i in range(1, len(str2)):
        if str1.find(str2[cursor: i])!=-1:
            if cursor < i and len(str2[cursor: i])>1:
                max_str = str2[cursor: i]
        else:
            cursor = i
            if max_str:
                yield max_str
            max_str = ""
    else:
        if max_str:
            yield max_str

print(list(match_max("Tadb12345tytr", "adb12344yttytr")))

# a
a = "not 404 50.6 found 张三 99 深圳"
pattern = re.compile(r"\d+\.?\d+|\d+|[a-zA-Z0-9]+")
result = pattern.findall(a)
print(result)

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值