题目:
思想:
LCP开头居然是新手村的意思,简单的模拟,遍历operations,对gem进行加减计算。
代码:
1 | class Solution: |
直接模拟,分别判断横向,纵向,对角线上的皇后是否存在,如果存在,就记录下来,最后返回。
答案的方法和我的类似,但是更加简洁,从国王往外走,记录碰到的第一个皇后。
1 | class Solution: |
1 | class Solution: |
第一眼以为是 N皇后 问题,然后读了半天没读懂题,所以去看了一眼答案()。
原来grid[row][col] 表示单元格 (row, col) 是骑士访问的第 grid[row][col] 个单元格。
的意思是pos[grid[i][j]] = (i, j)
然后这下就懂了,设置个初始值(2,1),然后从(0,0)开始遍历每个点与last
的值的差值是否是2,1或者1,2,如果不是,就返回False。
在答案中,ylb用的是pairwise的方法计算前后两个元素
for (x1, y1), (x2, y2) in pairwise(pos): dx, dy = abs(x1 - x2), abs(y1 - y2)
1 | class Solution: |
一开始的想法是构建有向图,然后在有向图中找到query的两个点是否有父子关系。
但看了ylb的答案后,发现先计算出可达性更快。
首先遍历prerequirements,将所有的可达性记录下来。
然后三重循环,连接所有的可达性。
i->j->k,如果i->k,那么i->k就是可达的。
1 | class Solution: |
思路来自于宫水三叶的贪心 + 优先队列,
sum += heapq.heappop(q)
Arrays.sort(courses, (a,b)->a[1]-b[1]);
等同于Python中的courses.sort(key=lambda x: x[1])
以下引用宫水三叶解法原文,关于为什么使用greedy:
题目是要我们构造出一种可行的排列,排列中每个课程的实际结束时间满足「最晚完成时间」要求,
求可行排序的最大长度(每个课程对答案的贡献都是 1)。
这容易引导我们往「泛化背包」方面进行思考:简单来说,对于某个物品(课程)而言,在不同条件下成本不同,
在时间轴 `[1,courses[i][1]−courses[i][0]]` 上该物品可被选,成本为其持续时间,
在比该范围大的数轴上无法被选,成本为正无穷。因此某一段特定的时间轴上,问题可抽象成有条件限制的组合优化问题。
由于数据范围为 10^4,泛化背包做法需要记录的维度大于一维,不予考虑。
再然后容易想到「二分」,显然在以最大选择数量 ans 为分割点的数组上具有「二段性」:
1. 使用数量小于等于 ans 的课程能够构造出合法排序(考虑在最长合法序列上做减法即可);
2. 使用数量大于 ans 的课程无法构造出合法排列。
此时二分范围为 `[0,n]`,问题转化为:
如何在 `O(n)` 检查是否可构造出某个长度 len 的合法排列(实现 `check` 方法)。
常规的线性扫描做法无法确定是否存在某个长度的合法排列,因此二分不予考虑。
我们需要运用「贪心」思维考虑可能的方案。
1 | import heapq |
1 | package main |
1 | package main |
1 | s := "hello" |
如果要声明一个多行的字符串怎么办?可以通过`来声明:
1 | m := `hello |
` 括起的字符串为Raw字符串,即字符串在代码中的形式就是打印时的形式,它没有字符转义,换行也将原样输出
Go内置有一个error类型,专门用来处理错误信息,Go的package里面还专门有一个包errors来处理错误:
1 | err := errors.New("emit macho dwarf: elf header corrupted") |
“Maybe it could be a nice memory”
Welcome to my personal blog repository on Github! My name is Sizhuo Long, and I am currently a student in Australia. This repository is home to my personal blog, which is built using the HEXO static site generator.
On my blog, you’ll find a variety of content including my thoughts on technology, programming, and the latest developments in my field of study. I also share my experiences and lessons learned from the projects I’ve worked on.
I hope that by sharing my knowledge and insights, I can help others who are interested in the same topics. I welcome any comments and feedback, and I am always open to collaboration.
Thank you for visiting my blog, I hope you will find something interesting here. And I would really appreciate it if you could pay more attention to my blog and follow me.
Thank you for reading, and I hope you enjoy my blog!
面向单细胞RNA数据分析工具
以前做的项目,还有很多错误,勿喷。
蜀地旅行菌
这是一个本科大二的时候的一个小作业,是小组作业。一开始因为链接不了html
文件,阅读了很多很多官方文档或者CSDN文档
。最后阅读了一篇文章,说是HEXO在当你generate
的时候,就会把source中的文件append到public中去,后来试了很多次,发现直接以
public为源文件夹,调用目录即可。虽然这样就会导致无法在md文档中超链接到文件。
同时,也存在新的bug未解决:login.html无法和index.html相互跳转
Linkin:
一行
首先题意是找到每个子列表中最大的那个数,然后把pop出去,最后求和。
一次次遍历效果太差,于是我想到了用zip一次性遍历多个子数组。
于是先对每个子数组排序,然后用zip遍历,找到最大值。
举个例子:nums = [[7,2,1],[6,4,2],[6,5,3],[3,2,1]]
排序后:nums = [[1,2,7],[2,4,6],[3,5,6],[1,2,3]]
然后用zip遍历得到:[(1,2,3,1),(2,4,5,2),(7,6,6,3)]
找最大值:[3,5,7]
求和:15
1 | class Solution: |
1 | nums = [[1,2,7],[2,4,6],[3,5,6],[1,2,3]] |
zip()
函数是将多个列表中的元素一一对应,然后返回一个zip对象,可以用list()函数转换为列表。
1 | for i in zip(num1, num2, num3, num4): |
*nums
的作用在python中不是指针,而是将nums中的每个元素作为参数传入函数中。我在这里理解为列举。
1 |
|
zip(*nums)
是将nums中的每个元素作为参数传入zip()函数中,然后返回一个zip对象,可以用list()函数转换为列表。zip(*nums)
等价于zip(num1, num2, num3, num4)
,其中num1, num2, num3, num4是nums中的元素。
1 | for i in zip(*nums): |
跟昨天的题一已,顺便找到了
力扣要的是一个很奇怪的precompiled.listnode.ListNode
,但是我的是'__main__.ListNode'
。
原因是:重复定义了$ListNode$
不反转链表的方法可能就是昨天的那种,转化为数学做。
代码依旧是0x3f的
与昨天的题解法一样
1 | class Solution: |
我本来写的是最蠢的方法,把两个链表转换成数字,然后相加,再转换成链表。但是很奇怪的是我在本地运行的时候是对的,但是提交的时候就不对了,
力扣要的是一个很奇怪的precompiled.listnode.ListNode
,但是我的是'__main__.ListNode'
。
所以只能看0x3f的答案。
每次把两个节点值`l1.val`,`l2.val`与进位值`carry`相加,除以 10 的余数即为当前节点需要保存的数位,除以10的商即为新的进位值
代码实现时,有一个简化代码的小技巧:如果递归中发现l2
的长度比l1
更长,那么可以交换l1
和 l2
,保证 l1
不是空节点,从而简化代码逻辑。
1 | class Solution: |
1 | class Solution: |