- 博客(52)
- 收藏
- 关注
原创 NumPy 4.输入输出
genfromtxt的唯一强制参数是数据的来源。它可以是一个字符串,一串字符串或一个生成器。如果提供了单个字符串,则假定它是本地或远程文件的名称,或者带有read方法的开放文件类对象,例如文件或对象。如果提供了字符串列表或生成器返回字符串,则每个字符串在文件中被视为一行。当传递远程文件的URL时,该文件将自动下载到当前目录并打开。识别的文件类型是文本文件和档案。目前,该功能可识别gzip和bz2(bzip2)档案。归档文件的类型由文件的扩展名决定:如果文件名以'.gz'结尾,则需要一个gzip归档文件;
2024-10-30 00:49:09
1083
原创 numpy 5.广播
术语广播(Broadcasting)描述了 numpy 如何在算术运算期间处理具有不同形状的数组。受某些约束的影响,较小的数组在较大的数组上“广播”,以便它们具有兼容的形状。广播提供了一种矢量化数组操作的方法,以便在C而不是Python中进行循环。它可以在不制作不必要的数据副本的情况下实现这一点,通常导致高效的算法实现。然而,有些情况下广播是一个坏主意,因为它会导致内存使用效率低下,从而减慢计算速度。NumPy 操作通常在逐个元素的基础上在数组对上完成。
2024-10-29 21:07:30
398
原创 numpy 4.索引
通常,当布尔数组的维数小于被索引的数组时,这相当于y [b,...],这意味着y被b索引后跟多少:填充y的等级所需的数量。因此,结果的形状是一个维度,其中包含布尔数组的True元素的数量,后跟被索引的数组的其余维度。通常,结果数组的形状将是索引数组的形状(或所有索引数组被广播的形状)与被索引的数组中任何未使用的维度(未索引的那些)的形状的串联。人们期望的是1-D数组的单元素索引。结果是构造一个新数组,其中索引数组的每个值从被索引的数组中选择一行,结果数组具有结果形状(索引元素的数量,行的大小)。
2024-10-29 18:28:54
1029
原创 Numpy 2.创建数组
有各种各样的方法可以使用。如果文件具有相对简单的格式,那么可以编写一个简单的 I/O 库,并使用 numpy fromfile() 函数和 .tofile() 方法直接读取和写入numpy数组(尽管介意你的字节序)!如果存在一个读取数据的良好 C 或 C++ 库,可以使用各种技术来封装该库,但这肯定要做得更多,并且需要更多的高级知识才能与C或C++ 接口。
2024-10-29 16:21:40
1011
原创 Numpy 1.数据类型
NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。ndarray 对象是用于存放同类型元素的多维数组。ndarray 中的每个元素在内存中都有相同存储大小的区域。ndarray 内部由以下内容组成:一个指向数据(内存或内存映射文件中的一块数据)的指针。数据类型或 dtype,描述在数组中的固定大小值的格子。一个表示数组形状(shape)的元组,表示各维度大小的元组。
2024-10-28 19:23:32
904
原创 Python5. 数据结构
如果相等,则比较之后的两个元素,以此类推,直到其中一个序列结束。如果两个序列中所有的对应元素都相等,则两个序列相等。如果一个序列是另一个的初始子序列,则较短的序列可被视为较小(较少)的序列。输入时,圆括号可有可无,不过经常是必须的(如果元组是更大的表达式的一部分)。常见的用法为,对序列或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表;另一种初始化字典的方式是,在花括号里输入逗号分隔的键值对,这也是字典的输出方式。注意,对不同类型的对象来说,只要待比较的对象提供了合适的比较方法,就可以使用。
2024-10-27 22:45:14
807
原创 Python4
下列代码创建一个可以输出限定数值内的斐波那契数列函数#是 fib 函数的文档字符串(docstring),用于描述该函数的功能。#它的主要作用是为代码提供说明和注释,使得代码更具可读性print()fib(2000)help(fib)#Python 的内置 help() 函数会读取文档字符串,便于使用者在不知道函数功能时查看其说明。
2024-10-26 16:28:43
1247
原创 Python123
C:\Users\MSI\AppData\Local\Programs\PythonControl-Z:退出解释器编码:# -*- coding: encoding -*-比如,声明使用 Windows-1252 编码,源码文件要写成:# -*- coding: cp1252 -*-3. Python 速览 3.1. Python 用作计算器 3.1.1. 数字>>>(50 - 5*6) / 45.0#除法运算 (/) 总是返回浮点数。 如果要做 floor division 得
2024-10-24 17:14:05
2876
原创 AcWing 849. Dijkstra求最短路 I
给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出 11 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。
2024-07-08 23:11:50
256
原创 844. 走迷宫
给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1) 处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m)处的数字为 0,且一定至少存在一条通路。
2024-07-04 20:54:47
404
原创 843. n-皇后问题
n−皇后问题是指将 n个皇后放在 n×n 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。现在给定整数 n,请你输出所有的满足条件的棋子摆法。
2024-07-04 20:50:37
317
原创 831. KMP字符串
给定一个字符串 S,以及一个模式串 P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模式串 P在字符串 S 中多次作为子串出现。求出模式串 P 在字符串 S 中所有出现的位置的起始下标。
2024-07-02 22:46:46
223
原创 AcWing 828. 模拟栈
push xpopemptyquery现在要对栈进行 M个操作,其中的每个操作 33 和操作 44 都要输出相应的结果。
2024-06-29 20:44:31
247
原创 827.双链表
现在要对该链表进行 M次操作,进行完所有操作后,从左到右输出整个链表。:题目中第 k个插入的数并不是指当前链表的第 k个数。例如操作过程中一共插入了 n个数,则按照插入的时间顺序,这 n个数依次为:第 1 个插入的数,第 2个插入的数,…第 n个插入的数。
2024-06-29 20:11:31
202
原创 数据结构:单链表
现在要对该链表进行 M 次操作,进行完所有操作后,从头到尾输出整个链表。:题目中第 k个插入的数并不是指当前链表的第 k 个数。例如操作过程中一共插入了 n 个数,则按照插入的时间顺序,这 n个数依次为:第 1 个插入的数,第 2个插入的数,…第 n个插入的数。
2024-06-28 12:24:56
256
1
原创 1.3 LeetCode
1.重温两数之和,使用unordered_map实现哈希,map(key,value);或者 map[i]=j;于是我让,数组的值为key,从前往后找,找不到就存到map里,这样使用的前提是假设只有一个有效答案,否则后来的相同的值的键会覆盖之前的键。auto it(第二个值的迭代器)=map.find(key);= map.end()){找到了}
2024-01-03 12:13:20
623
1
原创 438.找到字符串中所有字母异位词
时间复杂度:O(n+m+Σ),其中 n 为字符串 s 的长度,m 为字符串 p 的长度,其中Σ 为所有可能的字符数。需要 O(n−m) 来滑动窗口并判断窗口内每种字母的数量是否与字符串 p 中每种字母的数量相同,每次判断需要 O(1)。时间复杂度:O(m+(n−m)×Σ),其中 n 为字符串 s 的长度,m 为字符串 p 的长度,Σ 为所有可能的字符数。在方法一的基础上,我们不再分别统计滑动窗口和字符串 p 中每种字母的数量,而是统计滑动窗口和字符串 p 中每种字母数量的差;空间复杂度:O(Σ)。
2023-07-25 21:05:17
216
原创 42.接雨水
时间复杂度:O(n),其中 n 是数组 height 的长度。给定一个长度为 n 的整数数组 height。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。空间复杂度:O(n),其中 n 是数组 height 的长度。解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。时间复杂度:O(n),其中 n 是数组 height 的长度。空间复杂度:O(n),其中 n是数组 height 的长度。输入:[1,8,6,2,5,4,8,3,7]
2023-07-13 21:22:24
201
原创 15.三数之和
我们忽略存储答案的空间,额外的排序的空间复杂度为 O(logN)。= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]]不同的三元组是 [-1,0,1] 和 [-1,-1,2]。输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]输入:nums = [0,1,1]输入:nums = [0,0,0]输出:[[0,0,0]]
2023-07-12 20:47:24
110
原创 11.盛最多水的容器
有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。链接:https://leetcode.cn/problems/container-with-most-water。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。本质上,将高的保留,换矮的,因为可能换的时候换到更高的。输入:[1,8,6,2,5,4,8,3,7]输入:height = [1,1]说明:你不能倾斜容器。
2023-07-12 20:14:28
88
原创 283.移动零
感觉时间好像长了,呜呜呜, ii= nums.erase(ii);这样清除完向前走一步,如果等于零就不用++了,防止越界出现问题。给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。跟快速排序的想法差不多,left一直找零,right找到第一个不是零的数交换就行,特别快。链接:https://leetcode.cn/problems/move-zeroes。输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]输入: nums = [0]
2023-07-11 19:49:37
88
原创 49.字母异位词分组
时间复杂度:O(nklogk),其中 n是strs 中的字符串的数量,k是 strs 中的字符串的的最大长度。需要遍历 n 个字符串,对于每个字符串,需要 O(klogk) 的时间进行排序以及 O(1) 的时间更新哈希表,因此总时间复杂度是 O(nklogk)。输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]输出: [["bat"],["nat","tan"],["ate","eat","tea"]]map.find(key)//返回的是迭代器。
2023-07-11 18:04:22
87
原创 144.二叉树的前序遍历
链接:https://leetcode.cn/problems/binary-tree-preorder-traversal。给你二叉树的根节点 root ,返回它节点值的 前序 遍历。3.Morris遍历,能将空间复杂度降到O(1),本质上。输入:root = [1,null,2,3]输入:root = [1,null,2]树中节点数目在范围 [0, 100] 内。输入:root = [1,2]来源:力扣(LeetCode)输入:root = [1]输入:root = []输出:[1,2,3]
2023-07-10 20:37:47
77
原创 133.克隆图
空间复杂度:O(N)。存储克隆节点和原节点的哈希表需要 O(N)的空间,递归调用栈需要 O(H) 的空间,其中 H 是图的深度,经过放缩可以得到 O(H) = O(N),因此总体空间复杂度为 O(N)。由于图是无向的,如果节点 p 是节点 q 的邻居,那么节点 q 也必须是节点 p 的邻居。图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。输入:adjList = [[2,4],[1,3],[2,4],[1,3]]输出:[[2,4],[1,3],[2,4],[1,3]]
2023-07-08 20:48:04
81
原创 LeetCode 129.求根节点到叶节点数字之和
给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123。从根到叶子节点路径 4->9->5 代表数字 495。从根到叶子节点路径 4->9->1 代表数字 491。计算从根节点到叶节点生成的 所有数字之和。从根到叶子节点路径 1->2 代表数字 12。从根到叶子节点路径 1->3 代表数字 13。从根到叶子节点路径 4->0 代表数字 40。输入:root = [4,9,0,5,1]
2023-04-24 20:42:46
154
原创 LeetCode 124.二叉树的最大路径和
二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。该路径 至少包含一个 节点,且不一定经过根节点。解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42。解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6。输入:root = [-10,9,20,null,null,15,7]给你一个二叉树的根节点 root ,返回其 最大路径和。输入:root = [1,2,3]路径和 是路径中各节点值的总和。
2023-04-24 20:07:40
100
原创 LeetCode 117.填充每个节点的下一个右侧结点指针(2)
解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化输出按层序遍历顺序(由 next 指针连接),'#' 表示每层的末尾。填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。使用递归解题也符合要求,本题中递归程序的隐式栈空间不计入额外空间复杂度。输入:root = [1,2,3,4,5,null,7]输出:[1,#,2,3,#,4,5,7,#]
2023-04-24 16:21:09
92
原创 LeetCode 116.填充每一个节点的下一个右侧结点指针
解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化的输出按层序遍历排列,同一层节点由 next 指针连接,'#' 标志着每一层的结束。填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。输入:root = [1,2,3,4,5,6,7]输出:[1,#,2,3,#,4,5,6,7,#]
2023-04-17 22:26:40
90
原创 LeetCode 114.二叉树展开为列表
2.可以发现展开的顺序其实就是二叉树的先序遍历。输出:[1,null,2,null,3,null,4,null,5,null,6]3.考虑新的右子树的根节点,一直重复上边的过程,直到新的右子树为 null。输入:root = [1,2,5,3,4,null,6]//将原来的右子树接到左子树的最右边节点。2.将原来的右子树接到左子树的最右边节点。//将原来的右子树接到左子树的最右边节点。//将 2 的左子树插入到右子树的地方。//将 1 的左子树插入到右子树的地方。1.将左子树插入到右子树的地方。
2023-04-16 20:33:30
168
原创 LeetCode 113.路径总和 II
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22。输入:root = [1,2,3], targetSum = 5。输入:root = [1,2], targetSum = 0。输出:[[5,4,11,2],[5,8,4,5]]树中节点总数在范围 [0, 5000] 内。
2023-04-15 20:02:34
65
原创 LeetCode 112.路径总和
判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum。1.自己写的:自顶向下,要保存自顶向下的val值,他原先函数的参数表是bool hasPathSum(TreeNode* root, int targetSum)输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22。解释:由于树是空的,所以不存在根节点到叶子节点的路径。不存在 sum = 5 的根节点到叶子节点的路径。
2023-04-14 17:00:48
79
原创 111.二叉树的最小深度
在使用这些容器的过程中,我们会大量用到的操作就是插入操作,比如vector的push_back,map的insert,set的insert。这些插入操作会涉及到两次构造,首先是对象的初始化构造,接着在插入的时候会复制一次,会触发拷贝构造。但是很多时候我们并不需要两次构造带来效率的浪费,如果可以在插入的时候直接构造,就只需要构造一次就够了。输入:root = [2,null,3,null,4,null,5,null,6]输入:root = [3,9,20,null,null,15,7]
2023-04-14 16:11:30
138
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅