python
python的基础操作与基础代码
JKD_wen
我很懒 想不出简介
展开
-
算法练习 剑指Offer全解 python
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。需要的信息有:从前序序列中找到根节点的值、中序序列中左子树的左边界、中序序列中右子树的左边界。根据根节点的值,找到根节点在中序序列中的位置(提前构造好{值:位置}的dict)根据左右子树的边界信息,递归的对其左右子树进行上述操作。原创 2022-10-24 22:27:09 · 545 阅读 · 0 评论 -
算法练习——柱状图中最大的矩形 leetcode.80 python
而对于左右柱子或其本身有边界问题的柱子,我们需要将左侧边界标记为-1,以0号柱子为例,右边首个比他矮的是1号柱子,它的面积计算方法为:(1-(-1)-1)*height[0],这是符合常识的;因为既然他们满足了比4号高的判断条件,那么要判断序号大于4号的柱子的左侧首个比他矮的柱子时,如果2号、3号满足,那4号一定满足,且4号比2、3号更能接近“首个”这一条件;以3号柱子为例,它的左边首个比他矮的是2号柱子,右边首个比他矮的是4号柱子,以他开始画矩形的面积计算方法为:(4-2-1)* height[3]原创 2022-10-21 17:06:30 · 503 阅读 · 0 评论 -
算法练习——二叉树展开为链表 leetcode.114 python
由于在定义节点时已经默认左右指针指向None,故在恢复成链表结构时,不用单独处理最后一个节点(处理反而要单独判断输入为[]的情况)展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null。展开后的单链表应该与二叉树 先序遍历 顺序相同。原创 2022-10-21 10:52:28 · 293 阅读 · 0 评论 -
算法练习——最长子数组和 leetcode.53 python
题目描述:给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。C语言的解法可以参考 @weiambt 的这篇文章。连续子数组的最大和问题(五种解法)_weiambt的博客-CSDN博客https://blog.csdn.net/Supreme7/article/details/117398880思路一:暴力穷举class Solution: def maxSubArray(self, nums原创 2022-05-10 21:17:57 · 500 阅读 · 0 评论 -
算法练习——字符串相加 leetcode.415 python
题目描述:给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。思路分析:模拟竖式加法从num1和num2的最低位开始计算,计算 x + y + carry,carry记录每轮计算自低位的进位。对于长度不一的字符串,要用0补齐。class Solution: def addStrings(self,num1,num2):.原创 2022-05-09 15:12:15 · 231 阅读 · 0 评论 -
算法练习——有效的括号 leetcode.20 python
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:1.左括号必须用相同类型的右括号闭合。2.左括号必须以正确的顺序闭合。原创 2022-05-08 10:57:30 · 215 阅读 · 0 评论 -
算法练习——汉明距离 leetcode.461 python
题目描述:两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给你两个整数x和y,计算并返回它们之间的汉明距离解法一:关键在于将x、y转化为等长二进制位class Solution: def hammingDistance(self,x,y): cnt = 0 temp = 0 # [2:]的目的是去掉0b,[::-1]的目的是逆置数组,使得低位重合 x = list(bin(x))[2:][...原创 2022-05-08 10:23:11 · 542 阅读 · 0 评论 -
算法练习——比特位计数 leetcode.338 python
题目描述:给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。思路一:将每个数的二进制看成字符串,遍历每个字符串,统计"1"的个数class Solution: def countBits(self, n): res = [] for i in range(0,n+1): cnt = 0 s =原创 2022-05-07 09:44:31 · 320 阅读 · 0 评论 -
算法练习——只出现一次的数字 leetcode.136 python
题目描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。思路一:哈希表class Solution: def singleNumber(self,nums): dic = dict() for i in nums: if i not in dic: dic[i] = 1 else: dic原创 2022-05-07 09:15:15 · 303 阅读 · 0 评论 -
算法练习——翻转二叉树 leetcode 226 python
题目描述:给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。递归求解:class Solution: def invertTree(self, root): if not root: return None self.invertTree(root.left) self.invertTree(root.right) # def swap(left, right): .原创 2022-04-27 20:11:40 · 1161 阅读 · 0 评论 -
算法练习——平衡二叉树 leetcode 110
题目描述:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1 。参考解答:Leetcode 110:平衡二叉树(最详细的解法!!!)_coordinate_blog的博客-CSDN博客_110. 平衡二叉树https://blog.csdn.net/qq_17550379/article/details/82081501?ops_request_misc=%257B%2522request%25.原创 2022-04-26 22:31:54 · 467 阅读 · 0 评论 -
算法练习——二叉树的最大深度 leetcode.104 python
题目描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。题目求解:递归求解:# Definition for a binary tree node.class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left se原创 2022-04-26 21:18:29 · 641 阅读 · 0 评论 -
算法练习——对称二叉树 leetcode.101 python
题目描述:给你一个二叉树的根节点root, 检查它是否轴对称。递归求解:class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = rightclass Solution: def isSymmetric(self, root): if not ro..原创 2022-04-26 09:50:01 · 1255 阅读 · 2 评论 -
算法练习——二叉树的中序、先序、后序遍历 leetcode.94 144 145 python
题目描述:给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。代码实现(递归):# 定义树的数据结构class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = rightclass Solution: def inorderTraversal(self,原创 2022-04-24 09:51:14 · 1766 阅读 · 0 评论 -
算法练习——合并有序列表 leetcode.21 python
题目描述:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。方法一:双指针(三指针)class ListNode: # 单链表的结点 def __init__(self, val=0, next=None): self.val = val self.next = nextclass Solution: def mergeTwoLists(self, l1: ListNode, l2: ListN原创 2022-03-06 10:43:01 · 475 阅读 · 0 评论 -
算法练习——爬楼梯 leetcode.70 python
学习参考视频:华为算法大佬耗时200小时录制:Leetcode刷题100道,足以吊打字节面试官!_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1eg411w7gn?p=5题目描述:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?解题思路:思路一:自上而下——递归import timedef climbStairs(n): if n == 1:原创 2022-03-02 21:32:10 · 863 阅读 · 0 评论 -
算法练习——两数之和 leetcode.1 python
题目描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。先上暴力法,两次循环来求解:def twoSum(nums,target): lst = [] l = list(range(0, len(nums))) dic = dict(zip(l,nums))原创 2022-03-03 21:22:52 · 372 阅读 · 0 评论 -
学习记录(一)——python的小tips
希望这是一个好的开始记录并分享我在学习python过程中 觉得“哇”的知识吧如果有错误 请大家一定要多多指正1、判断整数的两种方法 方法一:只对float类型有效 利用is_integer函数判断其是否为整数j = 5.0; print(j.is_integer()) # Trueb = 5.5; print(b.is_integer()) # False 方法二:适用于所有 :x % 1 == 0:2、如何提取每个数字 n=12345 输出[1...原创 2022-03-01 15:32:23 · 351 阅读 · 0 评论 -
算法练习——合并数组 leetcode.88 python
题目描述:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。方法一:将nums2和nums1原创 2022-03-04 15:41:17 · 977 阅读 · 0 评论 -
算法练习——消失的数字 leetcode.448 python
题目描述:给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。方法一:hash表def findDisappearedNumbers(nums): n = len(nums) hash_dic = dict() lst = [] # 以下为建立hash表的过程 for i in range(0,n): has原创 2022-03-04 22:30:02 · 236 阅读 · 0 评论 -
算法练习——判断链表是否有环(二) leetcode.142 python
算法练习——判断链表是否有环 leetcode.141 python_tangchujiang的博客-CSDN博客https://blog.csdn.net/tangchujiang/article/details/123355082?spm=1001.2014.3001.5501上题的姊妹篇题目描述:给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。解法一:哈希表# class ListNode:# def __init__(se原创 2022-03-09 14:51:08 · 152 阅读 · 0 评论 -
算法练习——删除列表中的重复元素 leetcode.83 python
题目描述:给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。# Definition for singly-linked list.class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = nextclass Solution: def deleteDuplicates(self, head:原创 2022-03-06 23:32:52 · 444 阅读 · 0 评论 -
算法练习——判断链表是否有环 leetcode.141 python
题目描述:给你一个链表的头节点 head ,判断链表中是否有环。如果链表中存在环 ,则返回 true 。 否则,返回 false 。方法一:hash表hashset是一种特殊的hashmap,可以理解为只有key的map。python语言的set(集合)自带去重功能(集合元素的唯一性)。# 哈希表 O(m+n)class Solution: def hasCycle(self, head: ListNode) -> bool: if head == No原创 2022-03-08 16:08:38 · 1016 阅读 · 0 评论 -
算法练习——回文链表 leetcode.234 python
题目描述:给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。方法一:将链表的值转化为一个数组。两个指针从数组的首尾分别开始移动,在相遇之前,如果值一旦不等,则不是回文列表。class Solution: def isPalindrome(self, head: ListNode) -> bool: p = head lst = [] while p:原创 2022-03-11 16:33:21 · 1620 阅读 · 0 评论 -
算法练习——用栈实现队列 leetcode.232 python
题目描述:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false题前准备:栈的基础操作:class Stack: def __init__(self):原创 2022-03-18 01:00:44 · 712 阅读 · 0 评论 -
算法练习——移动零 leetcode.283 python
题目描述:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。方法一:暴力双重循环 i j两个指针一前一后进行交换排序 if len(nums) == 1: return nums i = 0 j = 1 k = 0 while k <= len(nums): while i < len(nums)-1: ..原创 2022-03-04 21:21:15 · 329 阅读 · 0 评论 -
算法练习——字符串解码 leetcode.394 python
题目描述:给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。附上一个更详细的解答,也是本文学习的方法:LeetCode 394. 字符串解码 | Python_"大梦三千秋的博客-CSDN博客_leetcode394根据栈先入后出的特性,来解决《394. 字符串解码》问题https://blog.csdn.net/weixin_45642918/art原创 2022-03-18 16:18:05 · 1312 阅读 · 0 评论 -
算法练习——反转链表 leetcode.206 python
题目描述:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。思路:对于要反转的结点B 链表A →B→C怎么变成 A ← B C呢四步走!①nextNode = CurrNode.next记录B的next(即C)的地址,否则链表一旦断掉(B→A),没人指向C,就找不到C的地址了②CurrNode.next = preNode让B指向A③preNode = CurrNode这时候B成为C的前一个结点 准备被C指向④CurrNode = nextN..原创 2022-03-09 19:51:55 · 565 阅读 · 0 评论 -
算法练习——相交链表 leetcode.206 python
题目描述:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。思路一:极度暴力法把A链表毁掉(譬如断链),当B走不通的时候,说明已经到了与A的公共部分。注意,函数返回结果后,链表必须 保持其原始结构 。思路二:暴力法对于A中的每一个节点,与B中的每个结点相比,循环结束的条件是(A.next == B.next) ,A指针和B指针指向同一个结点——找到了相交点。思路三:hash表优化cla原创 2022-03-09 22:25:57 · 774 阅读 · 0 评论