自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 topk大根堆

class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: def adju_max_heap(nums_list, in_node): # 从当前内部节点处修正大根堆 """"in_node是内部节点的索引""" l, r, large_idx= 2*in_node+1, 2*in_node+2, in_node # 最大值的索引默认为

2022-04-21 03:28:18 228

原创 二分等号细节

二分找list中的target元素循环条件取等,则左右指针更新为mid±1while l<=r: mid=(l+r)//2 if L[mid]==target: loc=mid break if L[mid]<target: l=mid+1 else:r=mid-1若通过二分法向单增list中插入元素(插入元素可能与list中元素重合也可能不重合)while l<=r: mid=(l+r)//2 if L[mid]<target: l=mid+1

2022-03-01 02:59:30 173

原创 二叉树总结

1.DFS的三种遍历顺序,特点2.BFS遍历使用两端队列(collections.deque())可以不占用额外空间,每层遍历删除头元素,将下一层子节点加入队尾3.考虑左右子树分治如最大深度=max(左子树最大深度,右子树最大深度)平衡二叉树:左子树平衡 and 右子树平衡 and 左右子树深度差<1重建二叉树:重建左子树+重建右子树4.注意搜索树的性质(左<root<右)搜索树考虑中序遍历:结果升序5.某节点路径、回溯问题,可以使用hash表储存父节点与子节点的指向关系

2022-02-25 03:41:07 469

原创 剑指 Offer 34. 二叉树中和为某一值的路径

思路:DFS,采用前序遍历,构建一个列表path[]来存叶子节点的路径,如果遍历到叶子节点,该路径不满足target,那么删除path中最后一个元素,同时返回上一层的父节点继续遍历如果该path满足target,将path的拷贝加入到result中class Solution: def pathSum(self, root: TreeNode, target: int) -> List[List[int]]: res=[] path=[] .

2022-02-23 23:01:33 90

原创 剑指68 最近公共祖先

二叉搜索树的公共祖先思路:搜索树一定是左<root<右,二分查找,root大于pq则pq公共祖先一定位于root左子树上,反之位于右子树,若pq在root两侧则root为公共祖先时间复杂度O(N)空间复杂度O(1)class Solution: def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode': while root.val

2022-02-23 22:39:21 156

原创 剑指32打印二叉树

剑指 Offer 32 - II. 从上到下打印二叉树 II思路:BFS(参考55)创建一个队列/列表que来储存每层节点由于需要每层打印,创建一个临时列表p来存每一层的打印结果需要一个中间变量temp储存每层遍历的节点,每次遍历更新que重置temp(这样需要额外的存储空间来储存每一层的节点)改进:用两端队列来储存节点,遍历时对队列进行操作:每次遍历,删除队列左边第一个旧节点,同时将新节点添加至队列末尾每层的循环次数为len(que),这样不需要额外存储空间class Solution:

2022-02-22 16:47:40 130

原创 剑指28 对称二叉树

对称二叉树思路:自顶向下递归判断左右两侧对应位置是否对称即:左空 and 右空:对称左右只有一个None:不对称左右对应节点值不等:不对称递归:左节点左子节点值=右节点右子节点值左节点右子节点值=右节点左子节点值class Solution: def isSymmetric(self, root: TreeNode) -> bool: def helper(L,R): if not L and not R:return True

2022-02-22 14:49:28 146

原创 剑指offer07 重建二叉树

剑指offer07 重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。思路:分治前序遍历:[root,[左子树前序遍历结果],[右子树前序遍历结果]]中序遍历:[[左子树中序遍历结果],root,[右子树中序遍历结果]]递归过程:root+左子树重建+右子树重建因此重点是确定每次子树重建时的范围,根据中序遍历对应索引确定前序遍历中对应子树的坐标范围class Solution: def buildT

2022-02-22 03:17:05 142

原创 环境配置2022.2.2

新电脑配置python环境1.安装anaconda首先安装anaconda,安装anaconda后无需再手动安装pythonanaconda安装过程中勾选将conda添加至path的选项,否则安装完需要手动添加环境变量anaconda对应python版本:conda与python版本对应表创建python环境conda create -n py3.7 python=3.7activate命令激活后使用python命令查看环境python版本conda下载源设置添加清华镜像:conda co

2022-02-03 01:20:31 1763 1

原创 线性回归、逻辑回归代码实现

生成样本点:import numpy as npimport matplotlib.pyplot as pltdef true_fun(X): return 1.5*X + 0.2np.random.seed(0)n_samples = 30X_train = np.sort(np.random.rand(n_samples)) y_train = (true_fun(X_train) + np.random.randn(n_samples) * 0.05).reshape(n_sam

2021-12-16 01:26:51 1763

原创 剑指54.二叉搜索树的第 k 大节点,55.二叉树深度

54.二叉搜索树的第 k 大节点中序遍历:left→root→right的顺序递归,得到的结果是升序采用right→root→left的方式,得到降序,存在list中,最后取第k个元素改进:提前停止递归每次递归traverse(right)之后记录步数,当到达k时,表示这是第k大节点,停止递归class Solution: def kthLargest(self, root: TreeNode, k: int) -> int: self.k=k d

2021-12-10 18:47:53 209

原创 leetcode链表总结

1.Python暴力解法:可以将链表变成list,对list操作再新建链表2.多用指针,用dummy(next=head)来处理首结点的边界情况3.创建链表尾插,颠倒顺序头插4.对链表的某一段操作:断开之前需要用pre和suc指针保存断开片段前后的结点5.一般next、cur、pre指针顺次改变顺序,比如倒序next=cur.next,cur.next=pre,pre=next6.对链表每k个结点操作:考虑递归,断开k个结点的片段,操作完后接回7.需要倒序:考虑递归、栈、指针迭代8.处理末尾边

2021-12-09 02:10:11 844

原创 138. 复制带随机指针的链表

python中的copy,deepcoy如果没有random指针,只要依次遍历原链表,每次创建一个新节点等于原链表节点,然后依次连接新节点即可完成deepcopy由于random指针,复制新节点时,random指针随机指向任意的原链表节点,而如果该原节点还没有被拷贝,新链表就会指向原链表,使deepcopy失败思路:遍历两次,第一次遍历复制所有节点,同时创建一个哈希表,key为原结点,value为复制的新节点第二次遍历来调整next指针,使用哈希表中的value替换random指向的原节点注意:.

2021-12-09 02:01:40 461

原创 86分隔链表,148排序链表,143重排链表,328奇偶链表

86.分隔链表新建两个链表,一个储存小于x的一个储存大于等于x的结点,然后拼接class Solution(object): def partition(self, head, x): dummy1=ListNode() dummy2=ListNode() p1,p2=dummy1,dummy2 while head: new=ListNode(head.val) if head.v

2021-12-08 01:48:15 217

原创 24.两两交换链表中的节点 25.K个一组翻转链表(hard)

24.两两交换链表中的节点1.分成偶数节点与奇数节点两个链表,拼接(自己的思路)时间空间复杂度都为O(n)需要额外空间储存链表class Solution(object): def sampleList(self,head): ###p,p2分别指向奇数节点与偶数节点## dummy=ListNode(next=head) p=dummy dummy2=ListNode(next=head.next) p2=dummy2

2021-12-08 01:11:24 623

原创 23.合并k个升序链表(hard)

分治思想同归并排序,对原list不断二分得到子列表,子列表长度为1或2时停止对于长度为2的子列表中的两个链表合并(合并两升序链表),不断向上归并时间复杂度O(nlogn)class Solution: "合并两个升序链表" def mergeTwoLists(self,l1,l2): dummy=ListNode() p=dummy while l1 and l2: s1,s2=l1.val,l2.val .

2021-12-07 20:54:22 491

原创 递归、分治·、快排及归并排序

添加链接描述

2021-12-05 14:43:16 89

原创 83 删除排序链表中的重复元素I,II

83删除排序链表中的重复元素1.双指针,注意边界,链表为[]不存在head.nextclass Solution(object): def deleteDuplicates(self, head): """ :type head: ListNode :rtype: ListNode """ if head==None: return head s,f=head,head.ne

2021-12-05 02:48:27 181

原创 206.反转链表 92.翻转链表II

206反转链表1.转为list反转再新建链表class Solution: def getlist(self,head): l=[] while head: l.append(head.val) head=head.next return l def initList(self,list): head=ListNode() p=head for

2021-12-02 22:03:33 336

原创 160.相交链表 234.回文链表

160.相交链表1.用set()检测是否有重复元素需要遍历并储存所有元素,时间空间复杂度都为O(n)class Solution: def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode: s=set() while headA: s.add(headA) headA=headA.next whi

2021-12-02 19:22:10 307

原创 leetcode2两数相加 445两数相加II 剑指offer22链表中倒数第k个结点 19删除链表的倒数第 N 个结点

1.链表转list相加再创建一个新链表空间复杂度O(n),时间复杂度O(n),需要遍历并储存全部的元素①遍历两个链表,取出所有元素组成list1,list2②对两个list求和:(1)对齐两个list的长度,缺的元素用0补齐(2)对应元素相加,大于10该结果减10,下一个元素进1,用try语句检测边界(末尾元素进位)③对求和结果的list创建链表class Solution: ##遍历链表,返回list#### def travelList(self,L): .

2021-12-01 21:53:48 375

原创 leetcode环形链表141、142

141环形链表1.最长就10000直接遍历计数,超过10000就是有环。。。。空间复杂度O(1)class Solution: def hasCycle(self, head: ListNode) -> bool: i=0 while head: i+=1 head=head.next if i>10000: return True

2021-12-01 20:58:35 261

原创 leetcode283 剑指45

Task 03 数组排序冒泡排序(Bubble Sort)选择排序(Selection Sort)插入排序(Insertion Sort)冒泡排序(Bubble Sort)冒泡排序法是通过相邻元素之间的比较与交换,使值较小的元素逐步从后面移到前面,值较大的元素从前面移到后面。最好时间复杂度O(n)(原数组为顺序),最差时间复杂度O(n2) (原数组逆序,双循环),稳定第一次比较前n个元素,第二次比较前n-1个元素for i in range(len(L)): for j in range(

2021-12-01 15:25:09 58

原创 LeetCode66 724 189 48 54 498

66. 加一给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。思路 1:数组转为数字num计算num+1,然后在转为数组,时间空间复杂度都为O(n)这种方法如果数字过大会溢出(1)自己的做法:class Solution: def plusOne(self, digits: List[int]) -> List[int]: n

2021-11-17 17:31:04 205

转载 性能评估指标

http://charleshm.github.io/2016/03/Model-Performance/

2021-11-09 16:32:06 109

转载 2021-09-18

再生希尔伯特空间与核方法http://songcy.net/posts/story-of-basis-and-kernel-part-2/

2021-09-18 15:44:58 49

原创 心跳信号分类预测(四)建模与调参

本次任务选择lightgbm进行建模调参。1.关于lightgbmLightGBM 由微软提出,主要用于解决 GDBT 在海量数据中遇到的问题,以便其可以更好更快地用于工业实践中。LightGBM及GDBT都是boosting的方法,即基模型的训练是有顺序的,每轮训练在前一轮训练的基础上进行。LightGBM针对XGboost在以下几个方面进行优化:1.单边梯度抽样算法;2.直方图算法;3.互斥特征捆绑算法;4.基于最大深度的 Leaf-wise 的垂直生长算法;5.类别特征最优分割;6

2021-03-26 02:51:11 772

原创 心跳信号分类预测(三)特征工程

学习目标学习时间序列数据的特征预处理方法学习时间序列特征处理工具 Tsfresh(TimeSeries Fresh)的使用1.导入数据# 包导入import pandas as pdimport numpy as npimport tsfresh as tsffrom tsfresh import extract_features, select_featuresfrom tsfresh.utilities.dataframe_functions import impute# 数据读取

2021-03-23 02:44:20 1028

原创 心跳信号分类预测(二)数据分析

EDA(Exploratory Data Analysis)对已有的数据(特别是调查或观察得来的原始数据)在尽量少的先验假定下进行探索,通过作图、制表、方程拟合、计算特征量等手段探索数据的结构和规律的一种数据分析方法。加载分析所用的python库#coding:utf-8#导入warnings包,利用过滤器来实现忽略警告语句。import warningswarnings.filterwarnings('ignore')import missingno as msnoimport panda

2021-03-20 02:35:17 1291 1

原创 心跳信号分类预测(一)赛题理解及Baseline

心跳信号分类预测(一)比赛链接比赛链接赛题概况比赛要求参赛选手根据给定的数据集,建立模型,预测不同的心跳信号。赛题以预测心电图心跳信号类别为任务,数据集报名后可见并可下载,该该数据来自某平台心电图数据记录,总数据量超过20万,主要为1列心跳信号序列数据,其中每个样本的信号序列采样频次一致,长度相等。为了保证比赛的公平性,将会从中抽取10万条作为训练集,2万条作为测试集A,2万条作为测试集B,同时会对心跳信号类别(label)信息进行脱敏。数据概况train.csvid 为心跳信号分配的唯一标识

2021-03-17 01:09:37 3574 5

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除