957. N 天后的牢房



思路:

模拟变换,当N天结合后返回 => 当N非常大的时候,超时 => 一般N很大的时候,这种题目必然存在循环,所以记录找过的状态,一旦出现已经访问过的状态可立即跳出循环。

  1. class Solution:
  2. def prisonAfterNDays(self, cells, N: int):
  3. vis = []
  4. while 1:
  5. if not N:
  6. return cells
  7. if cells in vis:
  8. ind = vis.index(cells)
  9. break
  10. tcell = cells.copy()
  11. for i in range(len(cells)):
  12. if i == 0 or i == len(cells)-1:
  13. tcell[i] = 0
  14. continue
  15. if cells[i-1] == cells[i+1]:
  16. tcell[i] = 1
  17. else:
  18. tcell[i] = 0
  19. vis.append(cells)
  20. cells = tcell
  21. N -= 1
  22. vis = vis[ind:]
  23. return vis[N % len(vis)]

825. 适龄的朋友



思路:

最直观的就是两层循环暴力,意料之中的超时了。那么就改以人为单位交友,变为以组(年龄相同的为一组)为单位交友。

还需要注意的一点就是15岁以下的没朋友,不符合第一个条件!

  1. from collections import Counter
  2. class Solution:
  3. def numFriendRequests(self, ages) -> int:
  4. ages, res = sorted(Counter(ages).items(), key=lambda x: x[0]), 0
  5. for i in range(len(ages)):
  6. if ages[i][0] < 15:
  7. continue
  8. res += (ages[i][1] - 1) * ages[i][1]
  9. for j in range(i):
  10. if ages[j][0] <= (ages[i][0] * 0.5 + 7):
  11. continue
  12. else:
  13. res += ages[i][1] * ages[j][1]
  14. return res

781. 森林中的兔子





思路:

颜色相同的兔子如果说自己有i个伙伴,那么所有伙伴都出现,该颜色对应的数字最多出现 i+1次 => 通过频率来判断,那些是同样颜色的。

  1. """
  2. 判断某数字出现的频次,数字0特殊处理一下
  3. 数字i出现的频次小于等于i+1时,说明大家都是一个色。
  4. 大于i+1的时候,就说明还有别的颜色,看是i+1的几倍就 i+1 * ?
  5. """
  6. import math
  7. from collections import Counter
  8. class Solution:
  9. def numRabbits(self, answers) -> int:
  10. ans, res = Counter(answers), 0
  11. for num, times in ans.items():
  12. if not num:
  13. res += times
  14. else:
  15. if times <= num + 1:
  16. res += num + 1
  17. else:
  18. t = math.ceil(times / (num + 1))
  19. res += t * (num + 1)
  20. return res

1324. 竖直打印单词



思路:

补上空格,矩阵转置输出,末尾的空格需要去掉。

  1. class Solution:
  2. def printVertically(self, s: str):
  3. s = s.split(" ")
  4. l = len(sorted(s, key=lambda x:-len(x))[0])
  5. for i in range(len(s)):
  6. s[i] = s[i] + (l - len(s[i])) * " "
  7. res = []
  8. for i in zip(*s):
  9. i = ("".join(list(i))).rstrip()
  10. res.append(i)
  11. return res

816. 模糊坐标



思路:

分割数组找到整数、小数部分。比较麻烦在于加上小数点后时候合理:

  1. 不是‘0’也不是'0.'但以0开头的不合理
  2. 以‘0’结尾的不合理
  1. """
  2. 先分割字符串,得到整数部分和小数部分,再分别为两部分加上小数点,同时判断加上小数点后是否为合理数字
  3. """
  4. class Solution:
  5. def ambiguousCoordinates(self, S: str):
  6. def produce(string):
  7. res = []
  8. # 本身就是一个完整的数字
  9. if len(str(int(string))) == len(string):
  10. res = [string]
  11. # 如果全是零直接返回
  12. if set(string) == {'0'}:
  13. return res
  14. # 在不同的位置添加小数点
  15. for i in range(1,len(string)):
  16. t = string[:i]+"."+string[i:]
  17. # 不是'0'也不是'0.'开头的,以'0'开头的都要删掉
  18. if len(string[:i]) >= 2 and string[:i].startswith("0"):
  19. continue
  20. # '0'结尾的也删掉
  21. if string[i:].endswith('0'):
  22. continue
  23. res.append(t)
  24. return res
  25. S, res, r = S[1:-1], [], []
  26. # 分割字符串获取整数、小数部分
  27. for i in range(1, len(S)):
  28. res.append((S[:i], S[i:]))
  29. for x, y in res:
  30. px = produce(x)
  31. py = produce(y)
  32. for i in px:
  33. for j in py:
  34. r.append("("+i+", "+j+")")
  35. return r

56. 合并区间



思路:

按照合并的要求来就vans了。先排序,保证遍历的时候后面的要么是头比前面大,要么是尾巴更长。记录当前拼接的头尾,如果遇到了头比当前拼接的尾巴还大,这两个区间不可能合并的,重新开始一次拼接,否则更新尾巴。

  1. class Solution:
  2. def merge(self, intervals):
  3. res = []
  4. # 先排序
  5. intervals = sorted(intervals)
  6. # 记录拼接的首尾大小
  7. s, e = intervals[0][0], intervals[0][1]
  8. for x, y in intervals[1:]:
  9. # 你的头大于我的尾部,不可能拼接的。重新开始一次拼接
  10. if x > e:
  11. res.append([s, e])
  12. s, e = x, y
  13. continue
  14. # 可以拼接到一起,更新尾巴
  15. if y > e:
  16. e = y
  17. if [s, e] not in res:
  18. res.append([s, e])
  19. return res

Leetcode题解 - 部分中等难度算法题解(56、957、825、781、1324、816)的更多相关文章

  1. Leetcode 12,452,455-贪心算法

    Leetcode第12题,整数转罗马数字,难度中等 整个题目比较好理解,难度也不大,就算不过脑子,用一串if也基本上可以解决问题,比如 /** 执行用时:6ms,在所有 Java 提交中击败了52.6 ...

  2. 每日温度(LeetCode Medium难度算法题)题解

    LeetCode 题号739中等难度 每日温度 题目描述: 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数.如果之后都不会升高,请在该位置用 0 ...

  3. LeetCode 算法题解 js 版 (001 Two Sum)

    LeetCode 算法题解 js 版 (001 Two Sum) 两数之和 https://leetcode.com/problems/two-sum/submissions/ https://lee ...

  4. C#版[击败99.69%的提交] - Leetcode 242. 有效的同构异形词 - 题解

    C#版 - Leetcode 242. 有效的同构异形词 - 题解 Leetcode 242.Valid Anagram 在线提交: https://leetcode.com/problems/val ...

  5. C#版 - Leetcode 504. 七进制数 - 题解

    C#版 - Leetcode 504. 七进制数 - 题解 Leetcode 504. Base 7 在线提交: https://leetcode.com/problems/base-7/ 题目描述 ...

  6. C#版(打败99.28%的提交) - Leetcode 347. Top K Frequent Elements - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...

  7. OC语言实现中等难度通讯录

    实现中等难度通讯录.需求: 1.定义联系⼈人类Contact.实例变量:姓名(拼⾳音,⾸首字⺟母⼤大写).性别.电话号码. 住址.分组名称.年龄.⽅方法:⾃自定义初始化⽅方法(姓名.电话号码).显⽰示 ...

  8. LeetCode刷题191203 --回溯算法

    虽然不是每天都刷,但还是不想改标题,(手动狗头 题目及解法来自于力扣(LeetCode),传送门. 算法(78): 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明: ...

  9. LeetCode算法题解

    1.给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的?(181) 解法一:举例说明,为了减少复杂度,就使用八位二进制吧. ...

随机推荐

  1. Spring 加定时器

    定时器功能我们一般不常用, 但是一旦用到,那也是非常重要的, 今天我们就讲一下如何简单快速的使用定时器 第一种方法, 使用注解的方式完成定时器 1.在spring-servlet.xml文件中加入ta ...

  2. SQL Server2012高可用之事物复制(发布订阅)测试

      (一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既不可写也不可读,即采用的高可用技术为"数据库镜像".存在的问题为 ...

  3. vue将接口返回的日期实时转换为几分钟前、几小时前、几天前

    项目开发中,各种需求都会遇到,有些需求很合理,也好实现,有些需求不能说不合理,就是太麻烦,就比如类似标题所描述这种的需求,你不能说它是不合理的需求,因为很多论坛或微博.朋友圈.QQ空间之类的这种效果还 ...

  4. Shell脚本实现DB2数据库表导出到文件

    该Shell脚本用于实现将DB2数据库表导出到文件,将在另一篇博文<Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件>中通过Java代码实现调用该脚本并传入参数. #! ...

  5. 倍增ST应用 选择客栈(提高组)

    重磅例题!ST表应用!提高组Getting! 1125: B15-倍增-习题:选择客栈[ST表应用] 时间限制: 1 Sec  内存限制: 128 MB提交: 35  解决: 12[提交] [状态] ...

  6. spark和mapreduce的区别

    spark和mapreduced 的区别map的时候处理的时候要落地磁盘 每一步都会落地磁盘 reduced端去拉去的话 基于磁盘的迭代spark是直接再内存中进行处理 dag 执行引擎是一个job的 ...

  7. Ansible配合Virtualenv安装配置

    Ansible的两种安装模式(Centos7) 1.Yum包管理安装 #yum -y install ansible 2.Git源代码安装[推荐] git clone https://github.c ...

  8. java 赋值运算

    注意:在赋值运算的时候,会自动发生数据类型转变 例子 public class test{ public static void main(String[] args){ byte num = 5; ...

  9. NC使用教程

    NetCat参数说明: 一般netcat做的最多的事情为以下三种: 扫描指定IP端口情况 端口转发数据(重点) 提交自定义数据包 1.扫描常用命令. 以下IP 处可以使用域名,nc会调用NDS解析成I ...

  10. (转)宽字节编码类型的XSS

    今晚又看了一遍PKAV-心上的瘦子写的xss腾讯系列的例子,收获挺大的,其中对宽字节注入有了更深的了解,又查找了一些相关的资料,整理一下,以备以后查阅 参考文档: http://book.2cto.c ...