![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 61
Vincent__Lai
这个作者很懒,什么都没留下…
展开
-
【算法】找到单次出现的元素最佳方法——异或
背景Leetcode 389. 找不同 (https://leetcode-cn.com/problems/find-the-difference/),以为用ASCII码值相减已经很快了,没想到还有更骚的——直接异或。。。附上大神代码,被秀的头皮发麻class Solution: def findTheDifference(self, s: str, t: str) -> str: res = 0 for i in s + t :原创 2022-03-20 12:32:54 · 715 阅读 · 1 评论 -
【Python】用哈希表来提高查询“元素“to“元素“效率
背景Leetcode 506. 相对名次(https://leetcode-cn.com/problems/relative-ranks/),这道题思路很简单,就是排序,然后找到返回排序后的索引。代码优化一开始写的代码是:score = [10, 3, 8, 9, 4]score_sort = sorted(score, reverse=True)res = []for s in score: loc = score_sort.index(s) if loc == 0:原创 2022-03-20 11:44:39 · 1510 阅读 · 0 评论 -
【Python】collections.Counter快速统计元素个数,免去手动构造字典的烦恼
用法用collections.Counter来快速统计元素个数:import collectionsa = collections.Counter("sdfdsgsdfdfssfd") #把所有元素出现的次数统计下来了print(a)输出结果:Counter({‘s’: 5, ‘d’: 5, ‘f’: 4, ‘g’: 1})具体案例Leetcode 409. 最长回文串 可用collections.Counter来快速解题。(https://leetcode-cn.com/probl原创 2022-03-20 10:53:12 · 829 阅读 · 1 评论 -
【算法】用计算机思维求解“12个硬币其中一个为假,三次称量找到假硬币”问题(附代码)
背景题目是这样子的:有12枚硬币,其中有一枚假币,而且真币与假币谁轻谁重不知,如何通过三次称量判断出哪枚是假币?这是一道很经典的逻辑推理题,乍一看感觉很想脑筋急转弯,但是其实完全可以用计算机思维去系统的解这道题。如果能够掌握系统的思维,这样就可以举一反三,解决更多的问题。——毕竟总不能啥都用人都推理吧?万一数据量变大了怎么办呢?例如39个硬币称4次要怎么称?这道题的关键:状态。——天平的状态、硬币的状态。思路首先,天平的状态只有3种可能:左边重、右边重、平衡。如果用计算机语言表示:左边重原创 2022-03-19 10:35:01 · 4368 阅读 · 0 评论 -
【算法】布赖恩·克尼根算法——天才算法求二进制中1的个数
题目背景做leetcode第461题汉明距离的时候,发现一个很骚的求1的个数的算法,大呼牛逼!其实题目本身思路不难,就是求异或然后算1个个数,只是没有想到还可以用这么骚的方式来求。布赖恩·克尼根算法思路是否可以像人类直观的计数比特为 1 的位数,跳过两个 1 之间的 0。例如:10001000。这是布赖恩·克尼根位计数算法的基本思想。该算法使用特定比特位和算术运算移除等于 1 的最右比特位。当我们在 number 和 number-1 上做 AND 位运算时,原数字 number 的最右边等于原创 2020-10-24 10:21:20 · 922 阅读 · 0 评论 -
【Python】一段很酷的计数排序Python代码写法
这一段代码是在做计数排序,就是分别统计0,1,2,3,4,5,6,7,8,9,10出现的个数,然后按照由大到小的顺序输出,有多个少就输出多少次。例如10出现次数为零,所以输出0个10。8出现一次,所以输出1个8。5出现两次,所以输出2个5。最后的结果为:8,5,5,3,2。score=[5,3,5,2,8]a = [score.count(i) for i in range(11)]pri...原创 2019-10-05 14:07:41 · 195 阅读 · 0 评论 -
【算法】希尔排序及其Python实现
插入排序思想思路形象记忆:代码实现要注意的地方考虑极端情况;gap要记得int一下;只要j小于gap,说明还可以向左走,所以j>=gap;只要arr[j-gap]>tmp,说明需要向左走;不是排完一个逻辑分组才去排另外一个,而是同时的。每一组每组都优化一个数;特点:其实就是在插入排序上多一个while循环判断gap。三个循环都与gap有关。while gap&...原创 2019-10-05 13:16:46 · 161 阅读 · 0 评论 -
【算法】插入排序及其Python实现
插入排序思想思路形象记忆:假设索引0在左边,则:每论排序后得到一个最小值;插入其实就是把未排序的数字中最小值插入到左边已经排序的后面代码实现要注意的地方代码参考:Python 插入排序...原创 2019-10-04 20:10:11 · 228 阅读 · 0 评论 -
【算法】冒泡排序及其Python实现
冒泡排序思想对名字的形象记忆:假设索引0在左边,索引1在右边,则:两个对比的数字就相当于是两个泡泡,然后这两个泡泡一路从左边冒到右边;每冒泡一次,右边的泡泡都比左边的泡泡大;每冒泡一轮,都诞生一个最大值。代码实现要注意的地方极端情况考虑(为空、N=1);N个数实际只需冒泡N-1轮即可,其他数字的位置固定了,最后一个数字的位置也就固定了;计算比较次数的时候,同时考虑轮数,每轮...原创 2019-10-04 20:00:33 · 146 阅读 · 0 评论 -
【算法】CenterNet运行demo时报错:RuntimeError: CUDA error: out of memory
问题描述python demo.py ctdet --demo /home/vincent/Code/CenterNet-master/images/ --load_model /home/vincent/Code/CenterNet-master/models/ctdet_coco_dla_2x.pth 运行以上面的demo代码时出现下面的错误Fix size testing.trai...原创 2019-10-01 19:34:54 · 1525 阅读 · 4 评论 -
【算法】链表相关内容
python中没有链表这种数据类型,所以需要先定义ListNode类class ListNode: def __init__(self, x): self.val = x self.next = None如果定义上图的链表,代码为:l3 = ListNode(3,None)l2 = ListNode(2,l3)l1 = ListNode(1, ...原创 2019-09-28 19:03:20 · 98 阅读 · 0 评论 -
【算法】二叉树遍历及其Python实现
基本概念二叉树结点的度数指该结点所含子树的个数。(二叉树的度最大值为2,即最多只有2个子节点)二叉树的深度是指所有结点中最深的结点所在的层数。更多具体细节:https://www.cnblogs.com/lliuye/p/9143676.html二叉树代码表示class TreeNode: def __init__(self, x, left, right): s...原创 2019-09-28 10:59:33 · 209 阅读 · 0 评论 -
【算法】归并排序及其Python实现
归并排序思想代码实现要注意的地方代码def MergeSort(lists): # 首先要划分,用递归的方法 # 递归终止条件 if len(lists)<2: return lists # 计算划分个数,左右对半分 middle = len(lists)//2 # 用递归的方法一路划分到底 left = Mer...原创 2019-09-28 10:00:53 · 122 阅读 · 0 评论 -
【算法】快速排序及其Python实现
快速排序思想:快排的思想是分而治之,在代码中用递归的方法实现:先随机选取一个基准值;进行第一遍排序,将小于等于基准值的数都放到左边,大于基准值的数都放到右边;开始递归,分别对左边的数和右边的数重复上述步骤,直到所有子数列只剩下一个数或为空代码实现要注意的地方递归的终止条件不能写len(arr)==1,因此可能会存在基准值是最小值(或最大值)的情况,此时基准值的左边为空(或右边为空...原创 2019-09-28 08:53:51 · 123 阅读 · 0 评论 -
【算法】超图的理解
在现实生活中,我们把两个节点的连线称为边,由边与节点组成的图形叫做图,如下图。其实上面这张图也叫做2阶超图,因为每一条边上只有2个节点。更一般的,当一条边上的节点数变为任意个时,我们把这条边叫做超边例如下图中,四个颜色分别代表了四条超边:黄色边e1上有3个节点(v1,v2,v3);红色边e2上有两个节点(v2,v3);绿色边e3上有三个节点(v3,v5,v6);紫色边e4上有一个...原创 2019-03-31 15:01:10 · 5751 阅读 · 0 评论 -
【算法】剑指Offer-牛客网知识点(待更新)
1.在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。数组寻值,for循环和enumerate()配合数组用[]2.请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20A...原创 2018-10-17 22:27:48 · 392 阅读 · 1 评论