自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 215。数组中第K个最大元素(堆实现)

class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: """堆排序思想""" def heapify(array, start, end): while True: max_pos = start #初始化最大值所在位置为目标所在

2020-09-27 19:00:58 104

原创 python数据结构实现(栈和链栈)

栈class Stack: def __init__(self, limit: int 10): self.stack = [] self.limit = limit def __bool__(self): return bool (self.stack) def __str__(self): return str(self.stack) def push(self, data): if

2020-09-27 18:12:22 228

原创 python协程(yield、asyncio标准库、gevent第三方)、异步的实现

引言同步:不同程序单元为了完成某个任务,在执行过程中需靠某种通信方式以协调一致,称这些程序单元是同步执行的。例如购物系统中更新商品库存,需要用“行锁”作为通信信号,让不同的更新请求强制排队顺序执行,那更新库存的操作是同步的。简言之,同步意味着有序。阻塞:程序未得到所需计算资源时被挂起的状态。程序在等待某个操作完成期间,自身无法继续干别的事情,则称该程序在该操作上是阻塞的。常见的阻塞形式有:网络I/O阻塞、磁盘I/O阻塞、用户输入阻塞等。阻塞状态下的性能提升引入多进程:在一个程序内,依次执行

2020-09-25 18:42:41 984

原创 python 进程(池)、线程(池)

进程、多进程、进程池进程总概述进程from multiprocessing import Processimport os# 子进程要执行的代码def run_proc(name): print('Run child process %s (%s)...' % (name, os.getpid()))if __name__=='__main__': print('Parent process %s.' % os.getpid(

2020-09-24 19:15:40 265

原创 Python推导式(列表推导式、元组推导式、字典推导式和集合推导式)

列表表达式a_range = range(10)# 对a_range执行for表达式a_list = [x * x for x in a_range]# a_list集合包含10个元素print(a_list)# 嵌套生成e_list = [[x, y, z] for x in range(5) for y in range(4) for z in range(6)]# e_list列表包含120个元素print(e_list)元祖表达式a = (x for x in range(1

2020-09-23 19:06:53 636

原创 python函数式编程(map、filter、reduce、zip、sorted)

[toc]map其中,function 参数表示要传入一个函数,其可以是内置函数、自定义函数或者 lambda 匿名函数;iterable 表示一个或多个可迭代对象,可以是列表、字符串等。map() 函数的功能是对可迭代对象中的每个元素,都调用指定的函数,并返回一个 map 对象。listDemo = [1, 2, 3, 4, 5]new_list = map(lambda x: x * 2, listDemo)print(list(new_list))filterfilter() 函数的功

2020-09-23 19:01:01 117

原创 实现队列的基本操作(数据结构)-python版

class Queue: def __init__(self): self.entries = [] self.length = 0 self.front = 0 def put(self, item): # 入队 self.entries.append(item) self.length += 1 def get(self):

2020-09-22 19:05:16 217

原创 414。查找第三大的数(维护3个变量)

给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。示例 1:输入: [3, 2, 1]输出: 1解释: 第三大的数是 1.示例 2:输入: [1, 2]输出: 2解释: 第三大的数不存在, 所以返回最大的数 2 .class Solution: def thirdMax(self, nums: List[int]) -> int: firstMax = secondMax = thirdMax = f

2020-09-22 13:46:25 130

原创 283。移动零至末尾元素(单指针)

移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。class Solution: def moveZeroes(self, nums: List[int]) -> None: """ Do not return anything, .

2020-09-22 10:45:20 87

原创 268。 查找缺失数字(遍历,数学法)

缺失数字给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。示例 1:输入: [3,0,1]输出: 2你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现?class Solution: def missingNumber(self, nums:List[int]) -> int: for i in range(0, len(nums)+1): if i not in .

2020-09-22 10:04:08 229

原创 python的多种魔术方法

[toc]定制类和魔法方法newstr , repritergetitem , setitem , delitemgetattr , setattr , delattrcallnew在 Python 中,当我们创建一个类的实例时,类会先调用 new(cls[, ...]) 来创建实例,然后 init 方法再对该实例(self)进行初始化。关于 new 和 init 有几点需要注意:new 是在 init 之前被调用的;new 是类方法,init 是实例方法;重载 new 方法,

2020-09-21 18:05:58 113

原创 实现链表的基本操作(数据结构)-python版

class Node: def __init__(self, data): self.data=data self.next=None def __repr__(self): return f"Node(self.data)"class LinkedList: def __init__(self): self.head=None def insert_tail(self,data):

2020-09-21 16:14:36 91

原创 218。重复元素II(重复元素的下标差值<=K)(哈希)

给定一个整数数组和一个整数k,判断数组中是否存在两个不同的索引i和j,使得nums [i] = nums [j],并且 i 和 j的差的 绝对值 至多为 k。示例1:输入: nums = [1,2,3,1], k = 3输出: trueclass Solution: def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool: res = {} for index, ...

2020-09-18 16:12:51 137

原创 217。数据中是否有重复元素(哈希表/set简法)

给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例 1:输入: [1,2,3,1]输出: true解法1:哈希表class Solution: def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool: res = {} for index, num in enumerat.

2020-09-18 16:11:26 142

原创 189。 数组旋转(空间复杂度O(1),原地算法)

给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]class Solution: def rotate(self, nums: List[int], k: int) -> None: ...

2020-09-18 15:06:22 275

原创 悟空、悟能、悟净的理解

前人把心肺阳气比喻成一只火炼的猴子,猴子上窜下跳,不是正应了心之相吗。这就是心猿一词的由来。那么,该怎么锻炼心猿呢?过去的人认为要去游历,去经历,经历越多心智越坚,所以这心猿又被取名为行者!而心猿究竟修炼到什么份上才算圆满呢?万物皆空,唯心所致,唯其空,便能包容万物。心猿就是要修到这个空字,所以这心猿的目标就叫悟空!而心肺阳气在体内有一个冤家,那就是肝肾阴气。五行配干支肝肾对应水亥,这阴气被形容为一只水浸的猪。这猪专司人的七情六欲,馋嘴滑舌贪淫好色。所以锻炼这只猪需要持戒,故名八戒。欲望并非一无是处,要

2020-09-18 13:19:52 2163

转载 python后端滴滴、网易、老虎证券

本人技术栈为Python后端开发,面经如下: 老虎证券(挂) 一面 python基础部分: 1. 迭代器生成器 生成器是如何实现迭代的 2. list实现 3. import一个包时过程是怎么样的? 4. 装饰器实现 5. 菱形继承 6. 内存垃圾回收:分代回收细节 7. 项目具体 8. mysql b+树 9. wsgi 二面 1. 堆排序 2. 比较c语言和Python语言中的...

2020-09-18 11:16:13 182

转载 字节跳动(os/python)

字节后端面经汇总(OS,Python部分) 字节跳动后端开发面经汇总(Python) 字节后端面经汇总(OS,Python部分)二. 操作系统①进程,线程,协程进程和线程的区别进程同步操作系统进程调度有哪些算法进程和线程切换,线程的状态实现进程同步的机制有什么多线程是怎么...

2020-09-18 11:09:20 2790 1

原创 Python数据结构list、set、dict、tuple底层实现

dict是借助哈希表(散列)实现的。借助哈希函数寻找位置:hash(k)=k mod m处理冲突借用的是开放寻址法解决冲突。时间复杂度控制在O(1)上。

2020-09-17 19:22:41 1065

原创 169。多数元素(数组中出现次数大于n/2)

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例1:输入: [3,2,3]输出: 3class Solution: def majorityElement(self, nums: List[int]) -> int: num_key = {} n = len(nums) for num in nums: ...

2020-09-17 19:07:55 211

原创 167。两数之和II-输入有序数组(双指针方法-缩小范围)

给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1必须小于index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。class Solution: def twoSum(self, numbers: List[int], target: int) -> List[int]: ...

2020-09-17 18:41:31 87

原创 122。买卖股票的最佳时机II(允许多次交易,贪心算法,相邻两天的最大利润进行累加)

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。知识小梳理:贪心算法一般按如下步骤进行:①建立数学模型来描述问题 。②把求解的问题分成若干个子问题 。③对每个子问题求解,得到子问题的局部最优解 。④把子问题的解局部最优解合成原来解问题的一个解 。class Solution: def maxProfi

2020-09-17 12:17:05 386

原创 121。买卖股票的最大时机(非连续的数组中找最大的差值,双指针, 动态规划思想)

给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。class Solution: def maxProfit(self, prices: List[int]) -> int: if len(prices)<1: return 0 min_price=prices[0] .

2020-09-17 11:39:32 107

原创 119。杨辉三角根据行的索引好进行所在行的输出

输入: 3输出: [1,3,3,1]class Solution: def getRow(self, rowIndex: int) -> List[int]: rowIndex = rowIndex + 1 res = [[1]*i for i in range(1, rowIndex+1)] //矩阵初始化 for i in range(2, rowIndex): for j in range(1, i):

2020-09-16 18:53:20 143

转载 非科班1年工作经验,拿下今日头条 Python 开发面经分享(经历知乎、360)

作者丨rapospectrehttps://www.rapospectre.com/blog/2017-backend-interview-share0.背景博主本人 2015 年毕业于郫县某 985 大学通信工程系,因为大学期间一直自己创业所以错过了大四秋招春招,毕业后又在北京继续创业一年,但在创业公司一直无法沉淀技术累积,于16年年底萌生进大公司学习的想法,于是从16年年底开始通过社招找工作。虽然大学就开始做研发,但无奈简历只看毕业工作经验,所以本人简历只有一年工作经验。在此总结一篇文章给各位参

2020-09-15 12:38:48 1362

原创 118。杨辉三角(本元素为左上方和右上方两元素的和)

例如:输入: 5输出:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]class Solution: def generate(self, numRows: int) -> List[List[int]]: res = [[1] * i for i in range(1, numRows + 1)] // 矩阵初始化 for i in range(2, numRows): // for j

2020-09-15 11:09:48 109

原创 88。合并两个有序数组(双指针法)

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出: [1,2,2,3,5,6]class Solutin:

2020-09-15 10:45:19 140

原创 53。数组中的最大子序和(极简,非分治)

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。class Solution: def maxSubArray(self, nums: List[int])—>int: for i in range(1, len(nums)): nums[i] = max(nums[i], nums[i-1] +

2020-09-14 10:53:19 64

原创 66。数组元素加一

加一给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。思路解析:非9加1. return是9置0, 继续循环如果+1后digits[0] = 0,则插入1在最前面,return。class Solution: def plusOne(self, digits: List[int]) -> List[int]: for i in ran

2020-09-14 10:46:56 636

原创 35。 (二分法实现)数组中搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。输入: [1,3,5,6], 5输出: 2class Solution: def searchInsert(self, nums: List[int], target: int) -> int: low=0 high=len(nums)-1 while(low<=high):

2020-09-11 14:56:18 111

原创 27。数组中移除与目标值相同元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素.class Solution: def removeElement(self, nums: List[int], val: int) -> int: i=0 while(i<=len(nums)-1

2020-09-11 14:53:29 120

原创 26。删除排序数组中重复的元素RemoveDuplicates(后续优化)

RemoveDuplicates给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。class Solution: def removeDuplicates(self, nums: List[int]) -> int: i = 0 while(i<len(nums)-1): if nums[i] == nums[i+

2020-09-11 12:43:46 1006

原创 1。数组篇Two_Sum

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。nums = [2, 7, 11, 15]target = 9class Solution: def sum(self, nums, target): look_up = {} for i, num in enumerate(nums): if target-num in look_up: return look_up[target-num],i l

2020-09-10 12:45:41 91

原创 数据结构算法C实现(快速排序递归算法)

快速排序void QuickSort(int R[], int low,int high){ int temp; int i=low,j=high; if(low<high); { temp=R[low]; while(i<j) // 将数组中小于temp的放到左边,大于temp的放到右边 { while(j>i&&R[j]>=temp) --j; // 从右往左扫描,找到一个小于temp的关键字 if(i<j)

2020-09-10 12:03:10 316

原创 数据结构算法C实现(二路归并排序算法)

// 将前后两个相邻有序表归并为一个有序表,设两段有序表A[low..mid]、A[mid+1..high]存放在同一个有序表的相邻位置,先将他们复制到辅助数组B中,// 每次从对应B中的两个段取出一个记录进行关键字的比较,将较小者放入A中,当数据B中有一段的下标超出其对应的表长(// 即该段段所有元素都已复制到A中)时,将另一段中的剩余部分直接复制到A中Elemtype *B=(Elemtype *)malloc((n+1)*sizeof(Elemtype)) // 构建辅助数组Bvoid Mer

2020-09-10 11:46:56 557

原创 数据结构算法C实现(希尔排序算法)

希尔排序void SHELLSORT(keytype K[],int n){ int i,j,flag,gap=n; keytype temp; while(gap>1){ gap=gap/2; do{ flag=0; // 是否执行交换,初始化不执行交换 for(i=1;i<=n-gap;i++){ // 每次循环n-gap趟 j=i+gap; // 增量为gap的元素两两作交换 if(K[i]>K[j]){

2020-09-10 11:12:08 172

原创 数据结构算法C实现(折半插入排序算法)

// 折半插入void BIN_INSERTSORT(keytype K[], int n ){ int i,j,low,high,mid; keytype temp; for(i=2;i<=n;i++){ // 每次插入 temp=K[i]; // 带插入元素暂存 low = 1; high = i-1; while(low<=high){ // 找到最小值的位置 mid=(low+high)/2; if(temp<K[mid])

2020-09-10 10:55:54 226

原创 数据结构算法C实现(堆积算法)

堆积排序// 教材// 初始化- 以第i个结点作为根结点的自述调整为一个新的堆积,即完成k[i]与其左、右子树的根节点k[2i]和k[2i+1]中最大值交换位置,// 若交换位置以后破环了子树的堆积特性,则再对这颗子树重复这个交换位置的过程,直到以结点i为根节点的子树成为堆积。// 堆积排序- 根节点和最后一个结点进行排序void ADJUST(keytype K[],int i,int m) // 初始化{ int j; keytype temp; temp=K[i]; j=2

2020-09-10 10:34:23 339

原创 数据结构算法C实现(冒泡排序算法)

冒泡排序void BUBBLESORT(keytype K[], int n){ int i,j,flag=1; // flag标志为是否需要交换 keytype temp; i=n-1; while(i>0&&flat==1){ flag=0; // 每一趟排序之前先置标志flag=0 for(j=1;j<=i;j++) if K[j]>K[j+1]{ temp=K[j]; K[j]=K[j+1] K[j+1]=

2020-09-09 12:39:07 173

原创 数据结构算法C实现(选择排序算法)

选择排序void SELECTSORT(keytype K[], int n)]{ int i,j,d; keytype temp; for(i=1;i<=n-1;i++){ d=i; //假设值最小元素为为排序元素的第1个元素 for(j=i+1;j<=n;j++) if K[j]<K[d] d=j; //寻找真正值最小元素,记录其位置d if(d!=i){ //当值最小元素非第一个元素时 temp=K[d]; K[d]=

2020-09-09 12:27:08 107

空空如也

空空如也

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

TA关注的人

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