IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> LeetCode 每日一题 2022/9/19-2022/9/25 -> 正文阅读

[数据结构与算法]LeetCode 每日一题 2022/9/19-2022/9/25

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步




9/19 1636. 按照频率将数组升序排序

counter统计个数 排序

def frequencySort(nums):
    """
    :type nums: List[int]
    :rtype: List[int]
    """
    from collection import Counter
    cnt = Counter(nums)
    nums.sort(key=lambda x:(cnt[x],-x))
    return nums



9/20 698. 划分为k个相等的子集

求总和 如果无法被k整除 则不能分割
如果能被分割 每组总和为m
回溯 cur记录每个数是否被使用

def canPartitionKSubsets(nums, k):
    """
    :type nums: List[int]
    :type k: int
    :rtype: bool
    """
    n = len(nums)
    s = sum(nums)
    if s%k>0:
        return False
    m = s//k
    if max(nums)>m:
        return False
    nums.sort()
    cur = (1<<len(nums))-1
    mem = {}
    print(nums,m)
    def find(cur,v):
        if (cur,v) in mem:
            return mem[(cur,v)]
        if cur==0:
            return True
        for i in range(n):
            if nums[i]+v>m:
                break
            if (cur>>i) &1 and find(cur^(1<<i),(v+nums[i])%m):
                print(nums[i])
                mem[(cur,v)]=True
                return True
        mem[(cur,v)]=False
        return False
    return find(cur,0)



9/21 854. 相似度为 K 的字符串

长度只有20 bfs

def kSimilarity(s1, s2):
    """
    :type s1: str
    :type s2: str
    :rtype: int
    """
    step = 0
    n = len(s1)
    q = [(s1,0)]
    mem = {s1}
    while q:
        tmp = []
        for s,i in q:
            if s==s2:
                return step
            while i<n and s[i]==s2[i]:
                i+=1
            for j in range(i+1,n):
                if s[j]==s2[i] and s[j]!=s2[j]:
                    t = list(s)
                    t[i],t[j] = t[j],t[i]
                    t = "".join(t)
                    if t not in mem:
                        mem.add(t)
                        tmp.append((t,i+1))
        step+=1
        q = tmp



9/22 1640. 能否连接形成数组

使用map 记录pieces中每个数组开头数值和其位置
遍历arr 找到开头值和其位置一一比较

def canFormArray(arr, pieces):
    """
    :type arr: List[int]
    :type pieces: List[List[int]]
    :rtype: bool
    """
    m = {}
    for i,p in enumerate(pieces):
        m[p[0]] = i
    loc = 0
    n = len(arr)
    while loc<n:
        v = arr[loc]
        if v in m:
            idx = m[v]
            l = pieces[idx]
            print(v,l)
            if arr[loc:loc+len(l)]!=l:
                return False
            loc += len(l)
        else:
            return False
    return True



9/23 707. 设计链表

单链表

class Node(object):
    def __init__(self,val):
        self.val = val
        self.next = None
    

class MyLinkedList(object):

    def __init__(self):
        self.len = 0
        self.head = Node(0)


    def get(self, index):
        """
        :type index: int
        :rtype: int
        """
        if index<0 or index>=self.len:
            return -1
        cur = self.head
        for _ in range(index+1):
            cur = cur.next
        return cur.val
            


    def addAtHead(self, val):
        """
        :type val: int
        :rtype: None
        """
        self.addAtIndex(0,val)


    def addAtTail(self, val):
        """
        :type val: int
        :rtype: None
        """
        self.addAtIndex(self.len,val)


    def addAtIndex(self, index, val):
        """
        :type index: int
        :type val: int
        :rtype: None
        """
        if index > self.len:
            return 
        index = max(0,index)
        self.len +=1
        pre = self.head
        for _ in range(index):
            pre = pre.next
        tmp = Node(val)
        tmp.next = pre.next
        pre.next = tmp


    def deleteAtIndex(self, index):
        """
        :type index: int
        :rtype: None
        """
        if index<0 or index>=self.len:
            return
        self.len-=1
        pre = self.head
        for _ in range(index):
            pre = pre.next
        pre.next = pre.next.next



9/24 1652. 拆炸弹

三种情况分别判断

def decrypt(code, k):
    """
    :type code: List[int]
    :type k: int
    :rtype: List[int]
    """
    n = len(code)
    ans = [0]*n
    if k>0:
        cur = sum(code[:k])
        for i in range(n):
            cur = cur-code[i]+code[(k+i)%n]
            ans[i] = cur
    elif k<0:
        cur = sum(code[n+k:])
        for i in range(n):
            ans[i] = cur
            cur = cur+code[i]-code[(n+k+i)%n]
            
    return ans
        


9/25





  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 21:19:25  更:2022-09-24 21:21:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:41:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码