- 博客(85)
- 收藏
- 关注
原创 seaborn可视化
seaborn分为一下两种绘制函数轴绘制函数 ( axes-level functions ),这一类函数把数据绘制到一个 matplotlib 的对象 matplotlib.pyplot.Axes ;图绘制函数 ( figure-level functions ),这一类函数是通过一个 seaborn 对象(通常是 FacetGrid )与 matplotlib 交互。图绘制函数相当于对轴绘制函数做了一层封装,方便用户调用。在图绘制函数可以设置不同的kind关键字便可以调用对应的轴绘制函数。..
2022-03-18 10:48:13 742
原创 pandas一行代码分解字典列
在使用Pandas的时候,有时候某些列里面存储的是字典,我们需要将这个字典里面的提出出来处理。使用apply函数即可。例如videos_df是一个DataFrame对象,它的statistics列是一个字典列,如图所示具体格式为{'aweme_id': '7067130856871038221', 'comment_count': 6, 'digg_count': 115, 'forward_count': 0, 'play_count': 0, 'share_count': 5 }
2022-02-21 20:37:14 1011
原创 DB2更新前N条数据
现在有一张表TB_DEVICE_MONITORED存在DB2数据库中,create table TB_DEVICE_MONITORED( ID int(10) primary key, STATUS varchar(1));要求将前N条数据STATUS更新为1如果是MySQL数据库可以直接利用limit关键字update TB_DEVICE_MONITORED set STATUS = 1 limit N但是DB2数据库没有limit语句,DB2选择前N条语句只能这么写
2021-10-27 10:56:48 1257
原创 二分碎碎念
在刷Leetcode中,常常见到一个序列,被切分为处于不同状态s1s_1s1和s2s_2s2的两个部分,例如[s1,s1,s1...s2,s2,s2][s_1,s_1,s_1...s_2,s_2,s_2][s1,s1,s1...s2,s2,s2],要求找到s1s_1s1和s2s_2s2切分点。这里记录一下。可以利用如下模板进行解题。 // left和right分别为列表的左边界和右边界 int left = 0, right = nums.length - 1; // 注意这
2021-06-18 16:12:45 264
原创 DB2中修改字段类型和长度
在DB2中修改字段的长度,实际上就是修改字段的类型,只需要执行以下命令即可。ALTER TABLE table_name ALTER COLUMN colunm_name SET DATA TYPE data_type;其中,table_name是表名,而colunm_name是字段名,data_type是你修改后的字段类型。例如,如果想要将名为orders的表的名为created_date的列,修改为TIMESTAMP。可以执行下面这条语句。原来的数据会保留不会丢失。ALTER TABL
2021-06-11 17:17:02 16284 1
原创 Java中利用lambda函数创建复杂条件比较器
在刷leetcode1的时候遇到这种问题,根据单词词频进行排序,如果词频相同,那么就按照字典排序。因为要用到比较器,而用Lambda表达式写出来的比较器比较简洁,问题如何写出复合条件下的比较器呢?比如说,现在需要比较Human人这个类。public class Human { private String name; //姓名 private int age; //年龄 // getter setter及构造函数省略}它具有年龄age和名字name两个属性,如何满足以下排序
2021-05-21 12:28:28 610
原创 docker根据镜像名来删除容器
docker根据镜像名来删除容器,可以采用以下命令。docker rm $(docker ps -q --filter ancestor=image-name)这里-f表示强制删除(可不选),后面的$符包围的是根据镜像查询的容器的id。在$中,-q表示只显示容器id。--filter表示根据条件筛选,ancestor=image-name表示选择镜像名为image-name的容器。例如,我们这里有一个名为registry.cn-hangzhou.aliyuncs.com/flowertree/tra
2021-05-19 11:39:45 2900 1
原创 db2中Operation not allowed for reason code “7“ on table解决办法
在DB2数据库中增加字段发生如下错误Operation not allowed for reason code "7" on table可以通过以下命令来解决。这里的MY_TABLE_NAME修改为你的表名即可。CALL SYSPROC.ADMIN_CMD('REORG TABLE MY_TABLE_NAME')解决方案来源stackoverflow...
2021-05-12 11:33:24 2795
原创 IP地址在数据库中的存储
MySQL中可以用4个字节的无符号数存储IPv4地址。可以用mysql inet_aton和mysql inet_ntoa来完成整数到IPv4地址的相互转化。来自《高性能的MySQL(第三版)》P127
2021-05-12 10:33:24 302
原创 二叉树前中后序遍历迭代实现
二叉树的前序遍历迭代实现144. 二叉树的前序遍历class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new LinkedList(); if (root == null) return res; Stack<TreeNode> visit
2021-05-08 11:34:54 142
原创 用于测试ssh的免费公开服务器
最近需要测试一下ssh服务,可惜没有服务器。于是到网上找了找免费公开的服务器。找到了这么个网站。第一行是邮箱,第二行是用户名。点击confirm注册后,会通过邮箱发送账户密码。然后ssh 用户名@tty.sdf.org。就可以开始连接了。https://sdf.org/...
2021-04-28 10:25:46 2305
原创 error: src refspec my-branch does not match any解决
推送到远方分支master的时候,使用git push origin master。error: src refspec my-branch does not match anyfailed to push some refs to *******参考了stackoverflow上面的答案。改成git push origin HEAD:master。就成了。回头再看看为什么。...
2021-04-27 14:39:42 672
原创 Vue学习
1.Vue初探<html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-with, initial-scale=1.0"> <title>Vue2</title></head><body> <!-- 待渲染的页面元素 --> <
2021-04-14 17:31:42 220
原创 934. 最短的桥
这里先用深度优先遍历,先找到第一座岛屿,将它们的邻接的海洋全部保存,然后从这些邻接海洋出发,利用广度优先遍历。直到遇到另外一座岛屿。class Solution { int[][] A; Queue<List<Integer>> area = new LinkedList(); // 记录第一个岛的所有邻接点 int[] dir = new int[]{0, 1, 0, -1, 0}; public int shortestBridge(in
2021-02-05 11:03:32 122
原创 剑指 Offer 43. 1~n 整数中 1 出现的次数
遇到难题就要面对复制粘贴编程。嘿嘿嘿。《剑指offer》上面的解题方法太复杂。Krahets大佬的题解就要简单多了,思考,复制粘贴,跑路。一气呵成。背下来就完事了。题解链接class Solution { public int countDigitOne(int n) { int cur = n % 10; int high = n / 10; int low = 0; int res = 0; int digit =
2021-02-05 09:37:12 100
原创 417. 太平洋大西洋水流问题
典型的搜索算法,不过这次搜索的目标有两个,到达太平洋和大西洋。需要写两个dfs递归函数。算法流程遍历图中所有点,调用深度递归函数。如果该点既能到达太平洋又能够到达大西洋。那么将这个点加入结果集。返回结果集合这里的递归算是深度优先遍历的模板步骤吧。不过这里标记是否访问用了一个小技巧,修改原数组,因为河流高度不能为0,所以将访问过的点记录为-1,表示已经访问。递归流程边界判定:判定越界以及是否访问返回条件:点处于边界递归工作:搜索高度比目前高度低的邻近节点,调用dfs。有一个点能够到达边
2021-02-03 12:13:26 289 2
原创 323. 无向图中连通分量的数目
基本上算是一道并查集的模板题目了。这题有两种解法:转化成一个图,用邻接链表表示。然后用DFS或者BFS去搜索用并查集去搜索。求连通分量一般都用这招。并查集相关的复杂度。相关的解释可以看看零神的讲解——借这个问题科普一下并查集各种情况下的时间复杂度优化平均时间复杂度最坏时间复杂度无优化O(logn)O(\log n)O(logn)O(n)O(n)O(n)路径压缩O(α(n))O(\alpha(n))O(α(n))O(logn)O(\log n)O(logn
2021-02-02 11:41:02 682
原创 剑指 Offer 41. 数据流中的中位数
用一个最大堆和一个最小堆来记录数据,保证最大堆的数据的最大值小于最小堆的最小值。并且保持两者的数目之差不超过1。这样便可以以O(1)O(1)O(1)的时间里找到中位数。class MedianFinder { private PriorityQueue<Integer> maxHeap; private PriorityQueue<Integer> minHeap; /** initialize your data structure here. */
2021-02-02 09:32:10 84
原创 剑指 Offer 39. 数组中出现次数超过一半的数字
没有什么好说的,问题是求出一题多解,这个咱们下次再做.class Solution { public int majorityElement(int[] nums) { int majorityElement = nums[0]; int cnt = 0; for(int num : nums){ if(num == majorityElement) cnt++; els
2021-01-30 09:36:07 40
原创 剑指 Offer 38. 字符串的排列
这里可以用排序并且比较来剪枝。和题目47. 全排列 II非常类似。复杂度分析时间复杂度:O(n!)O(n!)O(n!),排序字符串转换成的字符数组需要O(nlogn)O(n\log n)O(nlogn),而遍历所有的子串需要O(n!)O(n!)O(n!)。空间复杂度:O(n)O(n)O(n),递归栈的最大深度为字符串的长度,额外使用了长度为nnn的标记访问数组visitvisitvisit和字符数组charscharschars// 很典型的回溯算法,用一个visit数组标记是否访问// 注
2021-01-30 09:26:08 116
原创 剑指 Offer 37. 序列化二叉树
一道比较难的题目,构建二叉树的层序遍历序列倒是不难,难在反而行之,用二叉树的层序遍历序列构建二叉树。前者不必多说。后者解题技巧为:构建一个队列,同时维护一个遍历序列指针i。将序列第一个元素构建节点压入队列,记为head,i = 1。并反复进行如下操作,直到队列为空。最后返回head即可。队首出队,记作node构建node左子树,i++,并且将其入队构建node右子树,i++,并且将其入队算法复杂度:时间复杂度:O(n)O(n)O(n),nnn为节点的个数,需要访问所有的节点和额外的空节点。而
2021-01-29 09:39:59 80
原创 LeetCode 340. 至多包含 K 个不同字符的最长子串
用滑动窗口的办法来做这道题,用set保存当前集合的不同字母的个数。用长度为128的数组保存字符个数。// 试图用窗口法来做,用set来保存当前集合的字母的多少// k = 0的情况,s = null的情况class Solution { public int lengthOfLongestSubstringKDistinct(String s, int k) { int maxLen = 0; // 记录当前最长子串,初始为0 int l = 0;
2021-01-28 09:07:36 279
原创 剑指 Offer 36. 二叉搜索树与双向链表
class Solution { Node pre, head; public Node treeToDoublyList(Node root) { if(root == null) return null; dfs(root); head.left = pre; pre.right = head; return head; } void dfs(Node cur) { if(cu
2021-01-28 08:30:22 74
原创 剑指 Offer 35. 复杂链表的复制
这道题目的关键在于,每个节点还包含一个随机节点,随机地指向链表中的一个节点。我们不但要深度拷贝所有原链表的节点,还需要准确地让拷贝链表中随机节点的对应关系和原链表保持一致。假如我们先拷贝原链表,然后查找源链表中的随机节点对应关系,借此来拷贝随机节点。那么每个查找每个对应关系都需要付出O(n)O(n)O(n)的时间复杂度。拷贝整个链表的随机节点关系就需要O(n2)O(n^2)O(n2)的时间复杂度。哈希表先把节点全部复制一遍,并且将原节点和拷贝后的节点一一对应存储再哈希表中。再遍历一遍源链表和拷贝链表,根
2021-01-27 09:58:56 57
原创 剑指 Offer 34. 二叉树中和为某一值的路径
特别Ugly的回溯代码。太丑了。没有眼睛看。换一个吧class Solution { List<List<Integer>> res = new LinkedList(); public List<List<Integer>> pathSum(TreeNode root, int sum) { if(root == null) return new LinkedList(); Linke
2021-01-25 10:22:27 82
原创 剑指 Offer 33. 二叉搜索树的后序遍历序列
一个前序遍历序列和一个后序遍历序列都能够唯一确定一颗搜索二叉树。因为线索二叉树的特殊性质,左节点<父节点<右节点。而后序遍历序列为左节点|右节点|父节点。可以通过序列末尾的父节点,与序列的元素进行比较,就可以分割左节点遍历序列和右节点遍历序列。以此递推,就可以建立一颗搜索二叉树。递归工作递归参数:遍历序列的开始位置start和结尾位置end。将遍历序列posterorder作为成员变量供递归函数共享。终止条件:start >= end。说明该序列为空或者只有一个元素递归工作:从末
2021-01-25 09:21:55 133
原创 剑指 Offer 32 - III. 从上到下打印二叉树 III
这里将每一层的节点用双端队列temp保存起来,用tag标记奇偶层,当为奇数层时,节点陆续在队尾加入队列,而为偶数层时,节点陆续在堆首加入队列。class Solution { public List<List<Integer>> levelOrder(TreeNode root) { if(root == null) return new LinkedList(); boolean tag = true;
2021-01-24 09:48:20 67
原创 剑指 Offer 32 - II. 从上到下打印二叉树 II
这里需要分层打印,所以需要两个变量toPrint和nextPrint来记录剩余打印节点和下一层打印节点。再结合广度优先遍历搞定。class Solution { public List<List<Integer>> levelOrder(TreeNode root) { if(root == null) return new LinkedList<List<Integer>>();
2021-01-23 09:59:42 91
原创 剑指 Offer 32 - I. 从上到下打印二叉树
一枪秒了,有什么好说的。这种要按照层完成操作的,一般都需要用到广度优先遍历。class Solution { public int[] levelOrder(TreeNode root) { if(root == null) return new int[0]; Queue<TreeNode> print = new LinkedList(); ArrayList<Integer> res = new
2021-01-23 09:37:30 78
原创 剑指 Offer 31. 栈的压入、弹出序列
之前写的又不会了。难过。用一个栈来模拟进出序列,最后模拟栈为空,返回true。算法复杂度时间复杂度:O(n)O(n)O(n),虽然有两个循环,但是一个元素最多被操作两次,一次入栈,一次出栈空间复杂度:O(n)O(n)O(n),要新建一个堆栈,最坏的情况下,先全部入栈,再全部出栈。class Solution { public boolean validateStackSequences(int[] pushed, int[] popped) { Stack<Inte
2021-01-23 09:17:19 105
原创 剑指 Offer 30. 包含min函数的栈
做过了一遍再做一遍,思路掌握了基本莫得问题。这里要用两个堆栈来实现,一个保存最小值,一个保存数据。关键在于入栈操作,如何保证最小栈的栈顶始终是最小值。最小栈是否为空,为空,直接压入不为空,判断最小栈栈顶元素top和压入元素x的值若top < x,那么压入top反之,则压入xclass MinStack { Stack<Integer> minStack; //用于存放最小值的栈 Stack<Integer> dataStack; //用于
2021-01-22 09:15:54 115 4
原创 剑指 Offer 29. 顺时针打印矩阵
来源于Krahets大神的题解Krahets,永远的神。这种利用边界值来解决打印问题,既直观泛化性又好。妈妈再也不用担心我的打印了。用上下左右四个边界,并且在打印的过程中内缩边界。通过边界之间的比较来确定打印范围,避免了大量的索引比较操作,同时也不用分配访问数组来标记是否打印。代码简洁效率又高。妙哉,真的是神仙代码。别的不服,就服你了。class Solution { public int[] spiralOrder(int[][] matrix) { if(matrix ==
2021-01-22 08:57:32 127 1
原创 剑指 Offer 28. 对称的二叉树
一颗对称的二叉树,需要满足以下几个条件之一为空子节点均为空左子树的左节点等于右子树的右节点,而且左子树的右节点等于右子树的左节点根据这个性质可以递归,自顶向下,逐个节点进行判定递归递归参数:两个子节点leftleftleft,rightrightright终止条件:两个节点均为空,返回true,只有一个为空,返回false。递归条件:判断left.val==right.valleft.val == right.valleft.val==right.val,不相等,直接返回false,相
2021-01-21 14:37:38 108
原创 剑指 Offer 27. 二叉树的镜像
这题可以新建一个二叉树,进行复制粘贴的操作,不过这样比较麻烦.还可以在原地进行修改.通过后序遍历的方法,给每个节点都进行镜像操作.用后序遍历递归的方法递归参数:树节点root终止条件:root为空,返回递归工作:交换root的左右节点.class Solution { public TreeNode mirrorTree(TreeNode root) { mirror(root); return root; } private void
2021-01-19 08:29:25 77
原创 剑指 Offer 26. 树的子结构
参考大佬题解这题需要遍历A的每一个节点a,判断B是否为a的子结构。因此可以分为两步来做遍历A的每一个节点node函数isSubStructure,这里采用先序遍历判断B是否为node的子结构isSubisSubStructure函数递归参数:两个树节点返回条件:A或者B为空时,直接返回false。因为A为空B不为空,那么B必然不是A的子结构;B为空,空树不是任何树的子结构返回值:当满足以下三个条件之一,返回true。B是A的子结构B是A左子树的子结构B是A右子树的子结构i
2021-01-19 07:57:23 117
原创 剑指 Offer 25. 合并两个排序的链表
这题用递归和迭代都可以做,先看看迭代class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode res = new ListNode(-1); ListNode head = res; while(l1 != null && l2 != null){ if(l1.val < l2.val){
2021-01-18 09:09:44 94
原创 剑指 Offer 24. 反转链表
可以用堆栈法和双指针法class Solution { public ListNode reverseList(ListNode head) { if(head == null) return null; ListNode node = head; Stack<ListNode> stack = new Stack(); // 将节点全部压入栈中 while(nod
2021-01-18 08:39:39 77
原创 剑指 Offer 22. 链表中倒数第k个节点
这种有序的序列多半是可以用双指针法的建立快指针slowslowslow和fastfastfast,分别表示当前元素和当前元素之后的k−1k-1k−1个元素slowslowslow和fastfastfast同时右移,直到遇到fastfastfast没有下一个元素返回slowslowslow// 链表也能双指针// 考虑k>链表长度和k<=0的情况class Solution { public ListNode getKthFromEnd(ListNode head, int
2021-01-17 09:17:01 80
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人