数据结构和算法
文章平均质量分 64
中关村_周某
大家好,我是奔跑的洲洲
展开
-
Python敏感词过滤DFA算法+免费附带敏感词库
DFA简介参考:https://blog.csdn.net/chenssy/article/details/26961957此篇是上述JAVA敏感词过滤的python版本,完整版本,修改版本首先我们看看最终处理效果实例1:输入字符串处理结果核心代码:SensitiveFilter类框架如下class SensitiveFilter: #初始化 def __in...原创 2020-03-16 17:39:23 · 3338 阅读 · 7 评论 -
找到第K大
有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。示例1:输入[1,3,5,2,2],5,3返回值2示例2:输入[72,6,57,88,60,42,83,73,48,85],10,10返回值6import java.util.*;public class Finder { public int findKth(int[] a, int n, int K) {原创 2021-01-03 20:53:42 · 89 阅读 · 0 评论 -
二进制操作整理
求一个数 转二进制数后1的数目int func(int x){ int count = 0; while (x) { count++; x = x&(x - 1); } return count;}求x二进制表达式最低位是1对应的值int lowbit(int x){ return x&(-x);}原创 2020-11-13 16:14:06 · 259 阅读 · 0 评论 -
迭代法后序遍历二叉树 和 Morris遍历法
迭代法后序遍历首先声明一个栈 stack若root有左子树,root入栈,root=root.left,直到root为空,弹出栈顶元素并将其赋值给root若root没有右子树或右子树已经被访问,则访问root节点,用pre记录root,然后root赋值null(注意:只有访问root节点时才更新pre节点)若root有右子树,则root入栈,root=root.right/** * Definition for a binary tree node. * public class Tre原创 2020-09-29 09:51:27 · 246 阅读 · 0 评论 -
空间O(1)迭代法中序遍历二叉树
Morris算法基本思路:首先中序遍历顺序是:左 根 右当左子树为空:访问当前节点当左子树不为空:先找到它的前驱pre,【1】若果前驱pre的右指针指向cur,说明整个左子树都已经被访问了,此时访问当前节点,然后cur=cur.right即可【2】如果前驱右指针没有指向cur,说明整个左子树没有被访问,此时将前驱的右指针指向cur,然后cur=cur.left即可/** * Definition for a binary tree node. * public class TreeN原创 2020-09-24 10:44:37 · 175 阅读 · 0 评论 -
Java OJ常用输入写法
平时如果刷LeetCode刷的比较多,会忘记输入输出怎么写诶在开学上机考试前特地花1个多小时整理了Java版的输入写法一.输入一个数、两个数//一.【一个数、两个数】 Scanner sc = new Scanner(System.in); int m=sc.nextInt(); int n=sc.nextInt(); System.out.println("m: "+m); System.out.println("n:原创 2020-09-18 10:26:09 · 1201 阅读 · 0 评论 -
最小生成树模板(java)
Prim算法时间复杂度O(n^2)class Solution { public int minCostConnectPoints(int[][] points) { // int res=0; int n=points.length; int[][] arr = new int[n][n]; //构建邻接矩阵 for(int i=0;i<n;i++){ for(int原创 2020-09-14 08:43:25 · 199 阅读 · 0 评论 -
面试之巧解TopK
正文问题描述:从arr[1, n]这n个数中,找出最大的k个数,这就是经典的TopK问题。栗子:从arr[1, 12]={5,3,7,1,8,2,9,4,7,2,6,6} 这n=12个数中,找出最大的k=5个方法一:k次冒泡排序我们知道一次冒泡排序可以将一个数‘冒’到目的位置那么我们只要调用K次冒泡排序即可方法二:堆排序朴实无华的手写堆排class Solution: ...原创 2020-05-02 15:46:46 · 341 阅读 · 0 评论 -
字典树常用模板(不断更新
python版本class Trie: def __init__(self): self.children={} def insert(self, word: str) -> None: cur=self.children for i in range(len(word)): if word[i]...原创 2020-03-29 11:28:26 · 111 阅读 · 0 评论 -
最大公因子gcd
不需要调换a,b大小顺序def gdk(a,b): if b==0: return a return gdk(b,a%b)原创 2020-03-15 20:49:29 · 185 阅读 · 0 评论 -
python defaultdic使用
defaultdic使用实例:当字典的key不存在时,可以返回一个默认值from collections import defaultdictdic=defaultdict(list)#默认返回的类型print(dic[1])>>[]实例s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red'...原创 2020-03-15 19:31:49 · 565 阅读 · 0 评论 -
华为2020春季补招上机题
参加了华为的补招,一共三道题,满分600分,AC两道,400分就溜了T1.顺时针旋转矩阵输入n,表示正方形矩阵大小,再输入矩阵,最后输入mm表示顺时针旋转90°的次数输出旋转后得到的矩阵eg:输入:31 2 34 5 67 8 92输出:9 8 76 5 43 2 1解释:第一次顺时针旋转90°得到7 4 18 5 29 6 3第二次得到9 8 76 ...原创 2020-03-04 22:30:59 · 6355 阅读 · 4 评论 -
python的dic真的香
这个图展示了一样的代码,只是从list改成了hashmap的速度变化假设hashmap是字典L是List那么 item in L 查找速度是O(n)item in hashmap 查找速度是O(1)并且单独用 in hashmap.keys() in hashmap.values()会更快!!!...原创 2020-02-12 23:59:55 · 132 阅读 · 0 评论 -
位运算的神奇之处(python)
题目一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]先上代码from functools import reduceclass Solution: def singleNumbers(self, nums: Li...原创 2020-02-12 22:47:25 · 343 阅读 · 0 评论 -
python TopK 最小堆 最大堆问题
问题:给定一个非空的整数数组,返回其中出现频率前 k 高的元素例子1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]例子2:输入: nums = [1], k = 1输出: [1]有一个非常巧妙的方法,就是用哈希表在有很多元素重复的情况下,哈希表可以大大节省空间,同时提高速度class Solution: def topKFrequent...原创 2020-02-10 16:27:17 · 562 阅读 · 0 评论 -
递归常用优化总结-不断更新
这篇文章总结一些递归常见的优化方法以题目来说,leetcode 106,已知中序和后序遍历,构造二叉树方法一:传入数组为参数#中序遍历 左 根 右#后序遍历 左 右 根class Solution: def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode: n=le...原创 2020-01-27 23:12:04 · 331 阅读 · 0 评论 -
递归专题总结 - 不断更新
递归套路解决链表问题:1.找终止条件:当head指向链表只剩一个元素的时候,自然是不可能重复的,因此return2.想想应该返回什么值:应该返回的自然是已经去重的链表的头节点每一步要做什么:宏观上考虑,此时head.next已经指向一个去重的链表了,而根据第二步,我应该返回一个去重的链表的头节点。因此这一步应该做的是判断当前的head和head.next是否相等,如果相等则说明重了,返回he...原创 2020-01-21 14:36:53 · 172 阅读 · 0 评论 -
leetcode 21 链表合并
方法一:class Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: p1=l1 p2=l2 prehead=ListNode(-1) #ListNode{val:-1,next:None} cur=pr...原创 2020-01-21 13:06:16 · 100 阅读 · 0 评论 -
leetcode 206 反转链表的三种解法
方法一:递归法#递归法class Solution: def reverseList(self, head: ListNode) -> ListNode: if head==None or head.next==None: return head #反转后的末尾 也就是第一个 cur=self.reverse...原创 2020-01-21 11:18:26 · 149 阅读 · 0 评论 -
python、Java 快速排序
python3快速排序 #算法导论中的快排 #理解 i:首先划分为 前段 + 后段 (这时候没有pivot) #i 指向 前段的最后一个元素 #i+1 指向 后段的第一个元素 #前段都是小于等于 pivot,后段都是大于pivot def partition(a,low,high): x=...原创 2020-01-20 21:57:16 · 734 阅读 · 0 评论 -
二分的细节
二分的细节与模板最普通的二分搜索区间[left , right]每次搜索mid后一分为二 [left , mid-1] 和[mid+1 , right]出while循环条件 left=right+1int binarySearch(int[] nums, int target) { int left = 0; int right = nums.length - 1; /...原创 2019-09-11 20:47:57 · 168 阅读 · 0 评论