美文网首页
Python物语:Leetcode 算法

Python物语:Leetcode 算法

作者: 非著名自行车运动员 | 来源:发表于2020-12-06 18:12 被阅读0次
# coding:utf-8
# win 10 + python3

# 冒泡排序
def bubble_sort(arr):
    for i in range(1, len(arr)):
        for j in range(0, len(arr)-i):
            if arr[j] > arr[j+1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr


# 选择排序
def selection_sort(arr):
    for i in range(len(arr) - 1):
        # 记录最小数的索引
        minIndex = i
        for j in range(i + 1, len(arr)):
            if arr[j] < arr[minIndex]:
                minIndex = j
        # i 不是最小数时,将 i 和最小数进行交换
        if i != minIndex:
            arr[i], arr[minIndex] = arr[minIndex], arr[i]
    return arr


# 插入排序
def insertion_sort(arr):
    for i in range(len(arr)):
        preIndex = i-1
        current = arr[i]
        while preIndex >= 0 and arr[preIndex] > current:
            arr[preIndex+1] = arr[preIndex]
            preIndex-=1
        arr[preIndex+1] = current
    return arr

# 数组合并去重
a = [2,3,1]
b = [4,3,5]
f = a + b
# 去重并排序
c = set(f)
c = list(c)
print(c)
# 去重并保留原有顺序
c = sorted(c,key=f.index)
print(c)


# 两数之和
# 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。

nums = [1, 2, 7, 11, 15]
target = 9
def two_sum(nums,target):
    n = len(nums)
    d = {}
    for x in range(n):
        a = target-nums[x]
        if nums[x] in d:
            return d[nums[x]],x
        else:
            d[a] = x
        print(d)

# 统计字符串中字母出现次数
def count_strnum_1():
    d = {}
    for i in s:
        d[i] = s.count(i)
    print(d)

def count_strnum_2():
    d={}
    s='helloworld'
    for x in s:
        if x not in d:
            d[x]=1
        else:
            d[x]= d[x] +1  
    print(d)

# 回文数
def isPalindrome(self, x):
    if x < 0 or (x % 10 == 0 and x != 0):
        return False

    revertedNumber = 0
    while x > revertedNumber:
        revertedNumber = revertedNumber * 10 + x % 10
        x = int(x/10)
    return x == revertedNumber or x == int(revertedNumber/10)

# 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
nums = [1,2,3,4,5,6,7] 
k = 3
def list_move():
    if nums:
      k = k % len(nums)
      nums[:]=nums[-k:] + nums[:-k]
    return nums


# 无重复字符的最长子串
s='wwwkewippacvbn'
def longest_str(s):
    max_number = 0
    number = 0
    test = ''
    for i in s:
        #如果i不在test字符串里面,字符串test添加这个字符,number+1
        if i not in test:
            test += i
            number += 1
            s1=test
        else:  #i在test字符串里
            if number >= max_number:
                max_number = number
            index = test.index(i)
            test = test[(index+1):] + i
            number=len(test)
        if number > max_number:
            max_number = number
    print(s1)
    print(max_number)

"""

有红、黄、蓝三种颜色的气球。

在牛客王国,1个红气球+1个黄气球+1个蓝气球可以兑换一张彩票。

2个红气球+1个黄气球可以兑换1个蓝气球。

2个黄气球+1个蓝气球可以兑换1个红气球。

2个蓝气球+1个红气球可以兑换1个黄气球。

现在牛牛有a个红气球,b个黄气球, c个蓝气球,牛牛想知道自己最多可以兑换多少张彩票。
3红 + 2黄 = 1彩票
3黄 + 2蓝 = 1彩票
3蓝 + 2红 = 1彩票
"""


def three_max(r, y, b):
    min_num = min(r, y, b)
    r = r - min_num
    y = y - min_num
    b = y - min_num
    if r == 0:
        num = min_num + min(y/3, b/2)
    if y == 0:
        num = min_num + min(b/3, r/2)
    if b == 0:
        num = min_num + min(r/3, y/2)

    print(num)

# 最长重复字符串
def maxRepeatStr(arr):
    if not arr:
        return arr
    # 去重后的每个元素的重复字符串可能的最大长度
    len_up_border = len(arr) - len(set(arr)) + 1
    # 缓存遍历,最大长度和当前元素(分别初始化为1和最大ASCII码对应的字符)
    max_len = 1
    cur_element = chr(127)
    # res[max_len] = min_ascii_element_with_max_length
    res = {}
    # 长度反向遍历的跳出标识
    flag = False
    for i in range(len_up_border, 0, -1):
        for s in set(arr):
            spt = s * i
            # 以 spt 分割原始字符串作为判断依据:如果spt在arr中存在,则分割后长度>1; 若不存在,分割后长度=1
            splited = arr.split(spt)
            if len(splited) > 1:
                # print('i-->', i, 's-->', s, 'splited-->', splited)
                max_len = max(max_len, i)
                cur_element = min(cur_element, s)
                res[i] = cur_element
                flag = True
        if flag:
            break
    output = [v * k for k, v in res.items()]
    return output[0]

相关文章

网友评论

      本文标题:Python物语:Leetcode 算法

      本文链接:https://www.haomeiwen.com/subject/upgowktx.html