当前位置: 首页 > news >正文

LeetCode 每日一题 2022/9/19-2022/9/25

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


目录

      • 9/19 1636. 按照频率将数组升序排序
      • 9/20 698. 划分为k个相等的子集
      • 9/21 854. 相似度为 K 的字符串
      • 9/22 1640. 能否连接形成数组
      • 9/23 707. 设计链表
      • 9/24
      • 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





9/25





相关文章:

  • T1046判断一个数能否同时被3和5整除 (信息学一本通C++)
  • Canal + MySQL + Zookeeper + Kafka 数据实时同步
  • 我们如何一键将录音转换成文字?
  • 给计算机专业新生的一些学习建议
  • Java处理时间格式CST和GMT转换
  • VUE之组合式API
  • WebMagic
  • 梧桐树在售的金玉满堂增额终身寿险历久弥新,持续补充养老现金流
  • LDR6035 PD单USB-C口可充放电OTG协议芯片特点
  • php案例 解决cookie失效后使用session的问题
  • 远程访问服务器jupyter notebook
  • 便捷式物流成本核算教程
  • MAC实现Web UI自动化Safari
  • 【C语言刷LeetCode】2414. 最长的字母序连续子字符串的长度(M)
  • Oracle数据库中的游标知识点及实例(六)
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 【面试系列】之二:关于js原型
  • create-react-app做的留言板
  • Github访问慢解决办法
  • JS字符串转数字方法总结
  • Mybatis初体验
  • Mysql5.6主从复制
  • ViewService——一种保证客户端与服务端同步的方法
  • VUE es6技巧写法(持续更新中~~~)
  • 对JS继承的一点思考
  • 分享几个不错的工具
  • 高程读书笔记 第六章 面向对象程序设计
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • #AngularJS#$sce.trustAsResourceUrl
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (二)丶RabbitMQ的六大核心
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (附源码)计算机毕业设计大学生兼职系统
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (十一)c52学习之旅-动态数码管
  • (四)图像的%2线性拉伸
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)jdk与jre的区别
  • (转)为C# Windows服务添加安装程序
  • ***检测工具之RKHunter AIDE
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .Net Remoting(分离服务程序实现) - Part.3
  • .Net 代码性能 - (1)
  • .net 流——流的类型体系简单介绍
  • .NET单元测试
  • .NET建议使用的大小写命名原则
  • // an array of int