- 博客(39)
- 资源 (1)
- 收藏
- 关注
原创 Nacos获取动态配置的小坑记录(Docker安装nacos2版本的时候需要配置多个端口)
NACOS 2 需要占用8848 9848 9849 三个端口,安装docker时需要注意
2022-08-11 15:13:54
2184
原创 Golang Python通过gRPC跨语言调用DEMO
1、首先Python端和Golang端都要安装gRPC包和相应的源码生成工具python(适用于3.5以上版本):python -m pip install grpciopython -m pip install grpcio-toolsgolang:go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@
2022-05-22 16:06:38
789
原创 【备忘】二叉树遍历的迭代实现
二叉树的递归遍历很简单清晰,但是迭代遍历的话是有一定难度的,尤其是迭代中序遍历,因此在这里对二叉树三种前中后序遍历的迭代实现做一个小总结。先序迭代先序迭代利用额外的一个栈来辅助实现,类似于BFS,但与BFS不同的是,每次压栈需要先压入右子节点,再压左子节点,下面以Golang描述。func preorderTraversal(root *TreeNode) (res []int) { if root == nil{ return } stack := [
2022-03-30 20:46:01
229
原创 Leetcode143. 重排链表 (golang描述)
问题描述思路简述链表的题目主要考察coding基本功,思路难度都不算太大,这道的思路也很简单,而且链表的题目如果出现在面试一般都要求原地操作空间复杂度O(1),尽量不用容器;首先快慢指针找到链表的中点(奇数个节点时中点,偶数节点时上中点),然后对中点后的节点原地逆置,将逆置后的链表backup以后将中点的Next置空,随后重新组装链表即可。代码描述/** * Definition for singly-linked list. * type ListNode struct
2022-03-30 15:21:52
362
原创 Leetcode074. 合并区间
问题描述思路简述细节模拟题,很容易出错,挺考验细节的还是;不过思路还是不难想到,首先按照vector<list>的第一个元素升序排列,要注意的是如果第一个元素相同就按照第二个元素降序排列,比如[1,5] [1,7],需要把[1,7]排在前面方便后面模拟。排序后遍历intervals,同时j = i+1;指向下一个元素好判断当前元素i和下一个元素是否需要合并,合并规则即:当前vector的第二个值 大于等于 下一个vector的第二个值时,将下一个vector设置为inte.
2022-03-14 20:53:25
270
原创 左右边界二分查找小总结
普通二分查找比较简单,应用于查找某值是否存在于数组中;但是普通二分查找也有缺点,就是当有多个target值存在,想要返回target左右边界的下标时,普通二分查找就没有办法完成,虽然说可以在查找到某一坐标后向左向右分别线性查找,但这时候就没有办法保证时间复杂度了,这时候就可以利用带边界的二分查找算法。以下代码的搜索区间均为左闭右开,即left = 0, right = nums.size();如果是左右均是闭区间即right = nums.size()-1;时是有略微的不同不要盲目地套模板,要注意边
2021-05-09 20:20:57
482
2
原创 Leetcode-105-从前序与中序遍历序列构造二叉树
问题描述:思路简述:以前在学数据结构的时候遇到过这种题目,但是说实话没有用代码来实现过,迭代和递归都可以构造出来,但是相比来说递归构造的代码更加直观容易理解一些,思路就是找到先序遍历中的第一个元素(也就是最终整个二叉树的根节点),通过该根节点,得到其在中序遍历中的下标,比如用k表示,然后分别得到左右子树的先序和中序遍历,左子树的先序遍历也就是preorder[1:1+k],左子树的中序遍历也就是inorder[0:k];右子树的先序遍历为:preorder[1+k:],右子树的中序遍历为:ino
2021-05-08 20:27:57
94
1
原创 Leetcode-403-青蛙过河(DFS+备忘录)
问题描述思路简述这道题标签是DP类题目,但是用DFS+记忆剪枝也可以解决,DFS的思路是模拟暴搜所有可能的跳跃方案来判断是否有成功的方案,设计DFS函数的时候考虑当前石头的下标(用于判断是否到达了最后一块石头)以及上一步所用步数(用于枚举计算下一步能够跳出的可能步数);下面先给出DFS不带记忆的代码:class Solution {public: map<int, int> s_map; bool canCross(vector<int>&am
2021-04-29 16:09:14
244
原创 Leetcode-213:打家劫舍 II
问题描述:思路描述:典型的动态规划题,之前做过打家劫舍 I,这道题和 I 唯一的不同是房子是首尾相邻的,意思偷了第一家就不能偷最后一家,反之亦然;解决思路和打家劫舍 I也相同,维护两个变量,一个记录上一家不偷的最大收益,一个记录上一家偷的最大收益;*如果上一家偷了,那么这一家就不能再偷,当前的最大收益就是上一家偷了的基础上 + 0* 如果上一家没有偷,那么这一家就可以选择偷,当前最大收益也就是 max(上一家没偷的最大收益, 上一家偷了的最大收益) + 当前这家的财产。因为题目要求.
2021-04-15 16:20:31
120
原创 Leetcode 208:实现Trie(前缀树)
问题描述:思路简述:借用一张图前缀树又叫做单词查找树,是一种树形数据结构,可以用于存储大量的字符串,优点是可以利用不同字符串的公共前缀来节省大量的存储空间,避免了顺序存储字符串列表的冗余,可以看成是一个二十六叉树,一个子节点对应的就是二十六个字母中的一个,下面给出前缀树中一个节点的数据结构(以Python为例):class TrieNode: def __init__(self): self.isWord = True # 是否是单词 sel
2021-04-14 15:05:26
139
原创 《Optimized Risk Scores》论文附带代码运行记录
风险评分(risk scores)是利用简单的分类模型使用户能够简单地通加、减、乘少量的数字就能快速地评估风险,这样的模型广泛应用在了医疗保健、金融风险等领域中,在"Optimized Risk Scores"这篇论文中,提出了一个非常重要的方法去学习风险评分,将风险评分问题抽象为了混合整数非线性规划的问题,这种方法最大的好处是得到的评分是整数而不是小数,这就大大降低了在很多领域应用时的可解释性,在我现在复现的双层可加风险模型的论文中就提到了未来的工作,提出了将双层可加风险模型与RiskSlim结合,得到具
2021-03-08 00:50:42
546
原创 【问题记录】阿里云轻量云服务器Ubuntu安装图形化桌面+远程连接
最近需要用到github上一个包,克隆到本地windows环境下运行有问题,想在Ubuntu下尝试,虽然用虚拟机比较方便,但是考虑到这样的话实验室的电脑和自己的电脑都需要分别配虚拟机比较麻烦,就想直接在阿里云买个服务器跑个ubuntu远程桌面。https://common-buy.aliyun.com/?commodityCode=swas®ionId=cn-hangzhou选择的乌班图版本为16.04,开通完成后预装的Ubuntu是不带桌面只有命令行的,先安装xrdp:1、安
2021-02-04 15:51:14
1385
原创 吴恩达神经网络与深度学习 第三周课后作业
import numpy as npimport matplotlib.pyplot as pltfrom testCases import *from planar_utils import *import sklearnimport sklearn.datasetsimport sklearn.linear_modelfrom planar_utils import plot_decision_boundary, sigmoid, load_planar_dataset, load_ex.
2020-12-16 15:22:24
260
原创 Leetcode-496-下一个更大元素 I
问题描述:思路:这道题题目都读了半天才明白,翻译的实在有点...暴力:遍历nums1的元素,每一轮遍历,在nums2中找到相同值的那个元素在nums2中的下标,从该下标开始遍历,遍历nums2数组,找到第一个比该元素值大的元素,加入到结果数组中,如果没有找到就加入-1。单调栈法:单调栈的原理参考:https://blog.youkuaiyun.com/weixin_42784951/article/details/88963758; 开始时不需要管nums1,只需要对nums2构造单调栈,同时还要维
2020-12-01 16:37:24
114
原创 Leetcode-34-在排序数组中查找元素的第一个和最后一个位置
问题描述:思路:暴力解法比较直接不赘述但是时间复杂为n^2,主要是要求o(logN)的时间复杂度,肯定不能遍历,想到二分查找,找到目标target的所在的一个位置,然后向左 向右扩散查找,找到前面第一个不同的元素下标记为first = i+1,向右查找到第一个不同的元素,下标记为last = i-1。有一个细节,当向左查找到下标0时,或者向后查找到最后一个下标时如果还和目标元素值一样,就直接将first或last记录为当前下标然后结束循环就可以了。代码实现:暴力:vector<
2020-12-01 16:23:11
96
原创 Leetcode-148-排序链表(递归+迭代)
问题描述:思路:拿之前那道“对链表插入排序”的代码可以直接通过,但是不符合题目的要求:时间复杂度控制在O(nlogn),插入排序时间复杂度在o(n^2),又因为此时是对链表不是数组,所以考虑到使用归并排序。归并的两种解法:自顶向下递归和自底向上的迭代,其中递归法也不满足题目要求的o(1)级别的空间复杂度,故只有迭代才是满足题意的,对于递归的归并,书写代码难度更低,迭代实则是模拟一边全过程要考虑的边界情况都比较多细节可能出错的地方也很多。下面找到两幅图来说明递归和迭代法:对于递归来
2020-11-21 17:28:31
269
1
原创 Leetcode-233-数字1的个数
问题描述:思路描述:自己思考的算法是暴力,但是会超时;这道题主要是数学归纳能力,其实对编程能力要求不太高,只要能够总结出来规律编程就很简单,这个规律也是借鉴的大佬的:总体思想就是分类,先求所有数中个位是 1 的个数,再求十位是 1 的个数,再求百位是 1 的个数... ...假设 n = xyzdabc,此时我们求千位是 1 的个数,也就是 d 所在的位置。此时有三种情况,d == 0,那么千位上 1 的个数就是 xyz * 1000d == 1,那么千位上 1 的个数就是 x
2020-11-20 19:52:29
454
原创 Leetcode-401-二进制手表
问题描述:思路:总体思路还是很清晰,核心还是给出n个数中k个数的全组合(无重复);然后分别计算hour和minute,注意hour范围是0-11、minute范围0-59,大于11和59了的都要过滤掉,最后的字符串vector排序也可以不排序也可以通过的,只是在调试的时候为了方便我给排序了。vector<string> readBinaryWatch(int num) { vector<string> ans; if(!num){ an
2020-11-19 20:03:37
182
原创 生存分析之Cox模型简述与参数求解
最近布置的任务里需要用到Cox模型去评估企业风险趋势预测并建模,讨论Cox模型在企业风险量化建模过程中有实际的意义;从知网关键词检索结果可以看出Cox模型主要集中使用在医学信息工程、金融统计学领域,比如:研究多对基因对癌症发病的影响、分析癌症病人存活时间、银行客户资产风险评估等;Cox模型对企业风险趋势预测是一个相对比较新的idea。1、引子 先抛开定义、公式,直观地来看,假设你要研究某个对象(假如就是一个人)在事件t的生存概率,影响他生存概率的因素可以总结为两大类: ...
2020-11-06 16:43:09
16842
9
原创 LeetCode-108将有序数组转换为二叉搜索树
问题描述:代码实现:struct TreeNode* helper(int* nums, int left, int right) { if (left > right) return NULL; struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode)); int mid = (left + right) / 2; root->val = nums[mid]; root->le
2020-11-02 15:26:24
71
原创 LeetCode-107二叉树的层次遍历 II-BFS实现
问题描述:思路简述:这道题和102二叉树的层序遍历思路基本相同,多了一个步骤就是对最后的ans二维数组反转一下。这道题考点主要就是二叉树的BFS层序遍历法,实现核心就是维护一个nextLevel队列与一个thisLevel数组,nextLevel队列存储的永远是二叉树下一层的元素,所以循环的条件就应该是判断nextLevel是否为空,若不为空则层次遍历未结束。thisLevel是一个int数组,存储的nextLevel队列中pop出来的首元素的val值,同时将该元素的左右节点压入nextLeve
2020-11-01 16:32:38
125
原创 【备忘】高斯判别分析(GDA)参数手推记录
高斯判别模型是通过最大化贝叶斯模型中的最大后验概率为目标进行训练模型,是一个非常典型的生成模型,假设服从高斯分布,服从伯努利分布,通过训练数据集来确定正态分布与伯努利分布中的各项参数完善模型。对于新的数据集来临时,计算其满足各个已有类别的后验概率,选择概率最高的类别认为新数据的所属类别。参数的计算使用到了极大似然函数,需要对多维高斯分布表达式、伯努利分布表达式有所了解,需要知道矩阵求导基本公式,对于微积分中的偏导数求解熟练度要求较高。多维高斯分布表达式:伯努利分布表达式:求出
2020-10-29 22:41:54
387
原创 LeetCode-外观数列-纯C递归
问题描述:思路简述:首先没考虑递归,直接按时序来写发现思路有点混乱,用递归的话可以集中思路来解决这样的核心问题:"比如给字符串111 则返回字符串31;给字符串12 返回1112 ",相比思路会更加清晰,但是时间和空间复杂度确实不太理想。另外用纯C语言来写的话对于数组下标越界细节要多加注意;动态创建a数组时,之前数组长度给定的n莫名其妙越界直接和b一样给了个2n索性过了。char* describe(char * str) { int n = strlen(str); int* a =
2020-10-27 22:10:09
251
原创 逻辑回归(Logistic Regression)
逻辑回归(Logistic Regression)是统计机器学习中经典的分类方法,这个算法容易让人望文生义地理解为是回归算法,其实叫逻辑回归并不是为了刻意地制造歧义,因为它本质上和线性回归并无差别,只是最后利用了Sigmoid函数作为激活函数,将回归得到的值作为激活函数的输入,最后将输出映射到(0,1)区间上;若是用于二分类(其实逻辑回归也常用于二分类),假如指定阈值为0.5,大于0.5的数据分类为正样本,小于0.5归为负样本,以此达到分类的效果;逻辑回归还有另一个特性,不仅可以得出分类的结果,还可...
2020-10-26 19:06:27
272
1
原创 线性判别分析(Linear Dicriminant Analysis)参数推导记录备忘
线性判别分析(LDA)投影降维的思想,以类内小、类间大(类似于软件工程中高内聚低耦合思想)的目标实现了对数据集进行分类的效果。LDA的原始思想非常简单,在数据集平面(假如二维数据)上,找到一条直线,使所有数据点在该直线的投影点能够被一个中心点完全分离开且同类数据投影点尽可能集中,不同类数据投影点尽可能远离;这样就达到了分类的目的,可见,LDA还可以用于数据降维处理,但其降维性能有限,仅能从K维降至K-1维。LDA算法的计算核心就是该直线的方向,推导计算办法也是像之前线性回归中参数W推导思路,找出目标
2020-10-24 19:55:44
512
2
原创 感知机(Perceptro)二分类算法原理学习小结记录
感知机是非常古老的一个二分类算法,原理非常简单,直观地来说,对于平面上的两类数据点,找到一条直线来将其划分开来,对于空间中的点,用一个平面来将两部分完全划分开,这样的数据都是线性可分的,也就是在平面或空间中可以一刀划断的两部分数据,线性可分也是感知机模型使用的基本前提。感知机模型的基本思想是由错误分类点驱动迭代优化参数的模型学习过程,这在后面对Loss Function优化阶段可以有所体会。 首先,先把超平面表示出来:,对于的区域认为分类为,对于的区域认为分类为;超平面表达...
2020-10-21 21:47:13
1879
原创 【备忘】加入L2范数正则化后的正规方程求解参数推导过程
正则化的引入是为了解决线性回归中过拟合的问题,过拟合直观解释即训练出来的模型复杂度过高,对于当前用于训练的数据集而言预测非常精准,而对于未知数据样本的预测准确率逐渐走低,因此在目标函数中除了Loss Function以外引入了一个惩罚项。其中惩罚项还可以进一步分为L1范数与L2范数,其中L1范数是趋向于使得一部分参数值w为0,也叫Lasso;L2范数是削弱某些权重的值来纠正,L2相比L1更常用一些。* 矩阵求导过程略引入正则项后通过正规方程法直接求解参数w,可见结果中一定可逆,这也是引.
2020-10-19 21:28:05
868
原创 Python socket编程模拟最简单的HTTP响应
目的:用Python简单实现类似web本地服务器进行模拟HTTP请求的响应,在浏览器访问相应地址+端口号能够得到一个HTML页面思路:基于socket开发,监听127.0.0.1任一端口,如:8099,接收监听到的数据,并通过conn以HTTP响应的格式返回数据import socketsock = socket.socket()sock.bind(("localhost", 8800)) # 绑定监听的IP地址与端口8800sock.listen(5) # 设置最大监听数while
2020-08-07 22:43:31
1838
原创 kNN(k-nearest-neighbor)算法的Python实现
kNN算法即k近邻算法,是机器学习领域几乎最简单的入门算法,属于可以直接调用各类机器学习算法库中封装好的kNN算法,自己实现起来也并不麻烦,本文实现的是kNN算法的分类算法。kNN算法原理:对于需要预测的数据样本,找出测试数据中相隔最近的K个数据样本,统计出K个样本中占比最高的所属类别,即为预测数据的所属类型。import numpy as npfrom math import sqrtfrom collections import Counterraw_data_X = [[3.3935
2020-07-29 17:38:21
477
原创 conda & pip 安装NumPy速度不佳解决方案
NumPy本身下载包不大,但源地址位于国外,下载速度很慢且不稳定浪费了很多时间,切换到国内镜像源后即可:pip:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpyconda:先切换到国内清华大学镜像conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add c.
2020-07-17 15:32:20
3380
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人