- 博客(32)
- 收藏
- 关注
原创 SQL篇--查询练习II(查询语句)
根据上一篇查询练习I中给出的数据表和数据,进行查询练习。其中涉及简单查询,聚合,排序,多表查询等等。下面直接开始。1.查询所有记录该语句较简单select * from student;select * from score;2.查询固定的列如查询student中的姓名,select s_name from student;3.查询某列且要求不重复使用函数distinct,如查询score中的学号,且要求不重复select distinct s_no from score;4.
2020-07-21 20:55:01
774
原创 SQL篇--查询练习I(创建与插入)
在面试和实际操作中,sql的查询是最重要的。本文开始进行sql查询练习,首先需要数据准备,创建数据表并插入数据。本文的数据表是根据B站视频课程得来,并且主要参考评论区香草味的橙子整理的mysql笔记,文末也会再次放出引用链接。数据表主要包括:学生表 student课程表 course教师表 teacher成绩表 score下面进行创建和插入。1.学生表创建create table student( s_no varchar(20) primary key comment '学生学号
2020-07-21 15:14:53
429
原创 刷题篇--最大子序和、乘积最大子数组
最大子序和leetcode 53. 最大子序和,是经典动态规划问题。题目要求给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。如[-2,1,-3,4,-1,2,1,-5,4],连续子数组为[4,-1,2,1]和最大为6。动态规划问题主要是写成转移方程,该题要做的选择是dp[i]要选择当前的nums值还是选择dp[i-1]+nums[i],是上一步加上当前nums更大还是目前的nums更大。def maxSubArray(nums): if not
2020-07-14 09:31:46
315
原创 python基础--列表的反转插值
列表的反转、插值记录一些小操作,为了之后使用起来更加得心应手。反转和插值都比较简单,直接使用函数即可。但是我们可能会遇到一些要求,如按k个一组反转,隔位插入等。1.列表之间两两反转如[1,2,3,4,5]反转后[2,1,4,3,5]。def myreverse1(li): for i in range(0,len(li)-1,2): li[i], li[i+1] = li[i+1], li[i] return li2.列表按K个一组反转按K个一组反转,不足的不动
2020-07-12 17:10:28
463
原创 刷题篇--路径总和问题
路径总和问题leetcode 112、113、437 路径总和I、II、III是二叉树路径问题的变种,具体来说这三道题是树的深度遍历(DFS)的运用。所以大的框架是树的深度优先遍历。1.路径总和I该题要求是:给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。如果等于目标值则返回 true。通过分析我们知道需要找一条从跟到叶子的路径,其值等于目标值返回true即可。def hasPathSum(root, target): if not ro
2020-07-10 23:41:13
360
1
原创 刷题篇--不同路径问题
不同路径leetcode 62. 不同路径、leetcode 63. 不同路径 II 是经典的动态规划问题,从网格中找到从初始位置到结束位置的所有可能路径。动态规划问题可以理解成选择问题,我们怎么去选择从而得到需要的解。另外需要考虑其中的细节,如边界等。1.不同路径一个机器人位于一个 m x n 网格的左上角,机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角,那么总共有多少种路径可以选择。首先是该题的边界,机器人可以向右和向下,那么路径中初始的第一行和第一列都是1(说明可以走),之后就
2020-07-10 17:08:12
375
原创 刷题篇--除自身以外数组的乘积
leetcode 238. 除自身以外数组的乘积。该题要求不能使用除法,这类题基本就是找规律的问题,他可能没有固定套路或解法,是需要我们积累的。下面是解题关键,不乘本身相当于将本身的数换成了1:resres[0]1nums[1]…nums[n-2]nums[n-1]res[1]nums[0]1…nums[n-2]nums[n-1]…res[n-2]nums[0]nums[1]…1nums[n-1]res[n-1]
2020-07-10 16:20:06
170
原创 刷题篇--移动零
leetcode 283. 移动零,该题巧妙使用双指针。1.两次遍历def moveZeroes(nums): if not nums: return [] i = 0 for j in range(len(nums)): if nums[j] != 0: nums[i] = nums[j] i += 1 for x in range(i, len(nums)): nums[x] = 0 return nums 本方法双指针通过寻找
2020-07-07 15:54:24
127
原创 刷题篇--找到所有数组中消失的数字
leetcode 448. 找到所有数组中消失的数字,该题要求找到所有在 [1, n] 范围之间没有出现在数组中的数字,n是数组长度;如果所有数字都存在,其就是一个1-n的数组。我们可以利用这个特性,找到一种新的标记方法,原地找到消失数字。该题使用字典可求解,但是我们使用新标记法的技巧,保证不使用额外空间。def findDisappearedNumbers(nums): for i in range(len(nums)): new_index = abs(nums[i]) - 1 #根据nu
2020-07-05 20:53:37
172
原创 刷题篇--多数元素
leetcode 169 多数元素。该题是在大小为 n 的数组找到多数元素;而多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。我们使用字典法和摩尔投票法解该题。1.字典法字典法比较简单粗暴,直接遍历数组,key存储数组的值,value存储出现次数,当出现次数大于n//2时则返回。def majorityElement(nums): if not nums: return None if len(nums) == 1: return nums[0] #必须加此特判,因为如果nums中只要
2020-07-05 20:22:49
182
原创 刷题篇--合并链表
链表合并问题是一道经典题目,包括后面引申出的K个链表合并。leetcode 21 合并两个有序链表可以使用递归与非递归两种方法实现。1.递归方法def mergeTwoLists(l1, l2): if not l1: return l2 if not l2: return l1 if l1.val < l2.val: l1.next = mergeTwoLists(l1.next, l2) return l1 else: l2.next = mergeTwoL
2020-07-05 18:08:10
216
原创 刷题篇--二进制相关问题
二进制相关问题本文探索二进制相关题目,主要包括leetcode461.汉明距离136.只出现一次的数字191.位1的个数338.比特位计数1.汉明距离两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。解题思路是对两个数字进行异或(异或:相同为0不同为1),统计异或后1的个数就是汉明距离。def hammingDistance(x, y): tmp = x ^ y distance = 0 while tmp: if tmp%2: #判断异后的数字最后一
2020-07-04 22:59:23
271
原创 刷题篇--反转链表I、II
反转链表反转链表是面试题目中的经典题目,是必须要掌握的,其有各种变形,如只反转某部分、按K个一组反转等。本文主要实现leetcode中的反转链表I、II。1.反转链表Ileetcode 206,反转链表涉及链表知识,需要指针操作,需要注意的就是指针如何动的问题。def reverseList(head): if head is None or head.next is None: return head #特判 cur = head #定义三个指针,进行后续反转 pre = N
2020-06-30 23:53:32
226
原创 刷题篇--翻转二叉树
翻转二叉树leetcode 226题,翻转二叉树。本文使用递归和非递归两种方法解体。从这些题目中可以看出,树的问题,往往可以递归和非递归两种方式完成,并且和其深度遍历、广度遍历相关。1.递归def invertTree(root): if root is None: return root #递归必有终止条件 root.left, root.right = root.right, root.left self.invertTree(root.left)
2020-06-30 23:00:48
172
原创 刷题篇--合并二叉树
合并二叉树leetcode 617 合并二叉树。本文使用两种方法递归、非递归来实现。1.递归同样,递归方法较简单,容易理解。但是此题使用递归方法会产生一颗新的树。def mergeTrees(t1, t2): if t1 is None: return t2 if t2 is None: return t1 root = TreeNode(t1.val + t2.val) #TreeNode构造树节点 root.left = mergeTrees(t1.left, t2.left)
2020-06-26 23:32:00
144
原创 刷题篇--二叉树的最大深度
二叉树的最大深度该题是leetcode 104,是一道简单的经典题。本文用两种方法去得到二叉树的最大深度。1.递归本题递归方法比较简单,也容易理解。涉及树的问题,很多都可以使用递归。def maxDepth(root): if root is None: return 0 #递归都要有终止条件 ldepth = maxDepth(root.left) rdepth = maxDepth(root.right) return max(ldepth, rdepth) + 12.非递归
2020-06-26 22:49:49
187
原创 刷题篇--两数、三数之和
两数之和、三数之和是出现频率较高的题目,本文主要记录这两题的解法及背后的思想。1.两数之和该题是leetcode第1道,在该数组中找出和为目标值的那两个整数。暴力解法当然可以,但是面试官肯定不会放过你。这道题背后的知识点是哈希表,实际上并不难,最开始刷题不会也正是因为知识盲区或者不熟练,见过后就不可怕了。def twosum(nums, target): hashmap = {} for i in range(len(nums)): tmp = target - nums[i] if tm
2020-05-23 16:42:10
202
原创 python基础--is与==的区别及变量底层存储
python基础–is与==的区别及变量底层存储该篇文章分为两个部分,is与==的区别、变量底层存储。第二个部分是在第一个部分中思考延申得来。1.is与==的区别简单来说,==要求对象值相等即可,不要求地址也相等is要求值与地址都相等a = 2000b = 2000print(id(a)) #例为3215498476336print(id(b)) #3215498474416print(a == b) #Trueprint(a is b) #False
2020-05-21 16:16:12
194
原创 刷题篇--二分查找再探索
刷题篇–二分查找再探索刷完二分之后的感受,思想很简单,细节是魔鬼!前面的博客已经总结了二分查找的三个模板,但是在实际刷题中,还是会遇到一些细节上的问题。所以本文在模板基础上再次探索二分查找。1.leetcode69,x的平方根。计算并返回 x 的平方根。很明显x的平方根的解一定在1-x中,所以我们可以使用二分法。实际上上一篇博客已经记解过此题,在此我们进行细致分析。def mysqrt(x): l, r = 1, x while l <= r: mid = l + (r-l) //
2020-05-21 10:16:34
169
原创 刷题篇--二分查找
刷题篇–二分查找思路很简单,细节是魔鬼。----二分查找你真的了解二分查找吗?一般情况下二分查找要找到给的目标值,若没有找到则返回-1,这是传统技能。但是肯定会有幺蛾子出现,比如查找出数组中第一个出现或最后一个出现的位置、数组中有多少个要查找的元素等。该文章将会梳理二分查找的一些基本内容,如果理解不够透彻,就直接记模板。1.基本二分查找nums = [3,4,5,7,8,8,8,10]target = 5low, high = 0, len(nums)-1 #赋值左右指针while l
2020-05-15 17:52:25
249
原创 排序--堆排序
排序–堆排序堆排序堆排序(Heap Sort),可以用来进行排序。一般来说,大根堆被用来进行升序排序,小根堆被用来进行降序排序。堆排序的思想分为两步:初始化堆:将数列a[0…n]构造成最大堆交换数据:将a[0]与a[n]交换,则a[n]是数列中的最大值,然后将a[0…n-1]重新调整为最大堆实现过程如下def heapify(li, n, i): #n为数组长度,i为要调整...
2020-05-06 18:33:05
415
原创 排序--快排的两种写法
排序–快排的两种写法之前的博客记录过各种排序快排算法代码如下,该方法思路很直接也很清晰,但是在生成left和right时会需要新的空间,所以其空间复杂度要高一些。def quick_sort(li): if len(li) < 2: return li tmp = li[0] #快排中将序列分为左右的值 left = [x for x in li if x < tmp]...
2020-05-06 15:17:23
497
原创 python基础--列表去重
python基础–列表去重在实际操作中,我们很可能会遇到去重问题,所以在这里进行去重操作的总结。另外,在leetcode中也有些重问题,也进行一个总结和梳理。1.set去重#set直接去重,但是不能保留li = [4,3,2,1,1,2,3,4]li = list(set(li)) #结果为[1,2,3,4]'''很明显set直接去重并不会保留原来的位置信息,如果保留位置信...
2020-05-03 21:48:24
326
原创 python基础--del操作
python基础–del操作list中remove和del的区别#remove删除首个符合条件的元素,并不删除特定的索引l1 = [1,1,1,2,3,4,5,5]l1.remove(2)print(l1) #[1, 1, 1, 3, 4, 5, 5]#del按照索引删除字符l2 = [1,1,1,2,3,4,5,5]del l2[2]print(l2) #[1, 1, 2...
2020-04-27 18:15:47
4170
原创 python基础--切片
python基础–切片太菜了,怎么基础怎么来。。。主要记录普通切片,有负值索引的切片,有步长的切片普通切片test = [x for x in range(0,10)] #列表生成式,生成0-9的列表res = test[2:7] #结果为[2, 3, 4, 5, 6]res = test[2:1] #结果为[]re...
2020-04-21 11:34:22
148
原创 数据结构--树的python实现
数据结构–树的python实现相对于链表、栈和队列,树的结构是最复杂的。本文在实现的时候会把树的各操作分开写,各个击破。1.构造树class TreeNode: #首先定义树的节点 def __init__(self, x): self.val = x self.left = None self.right = Noneclass Tree: de...
2020-04-20 21:01:22
469
原创 数据结构--栈和队列的python实现
数据结构–栈和队列python实现1.栈(先进后出)class Stack: def __init__(self): self.__list = [] #用列表来实现 def is_empty(self): #判断是否为空 return self.__list == [] def push(self, item): #压栈 self.__list.app...
2020-04-20 11:11:50
239
1
原创 数据结构--单链表的python实现
数据结构–单链表python实现用python实现单链表。在面试中遇到过链表题,当时需要自己构造链表,发现自己以前一看就明白,一写就拉跨。。。所以从零开始自己写一下,也锻炼下自己的(辣鸡)代码能力。先简单实现链表,后续功能会不断添加下面是最简单的构造出一个链表,,使用while循环直接往上添加class listNode: def __init__(self, x): ...
2020-04-19 23:01:51
215
原创 排序--各种排序python实现
各种排序的python实现由于最近在准备笔试面试,所以重新复习梳理了一下排序算法。排序算法的过程在网上已经有很多了,这里只总结代码和结论。1.插入排序def insert_sotr(li): for i in range(1,len(li)): j = i while j > 0: if li[j] < li[j-1]: li[j], li[j-1] = ...
2020-04-19 18:27:30
338
原创 NLP笔记--keras文本数据预处理
NLP笔记–keras文本数据预处理前言在把数据喂入模型前,我们必须要把文本处理成计算机认识的数据。所以文本的预处理是必不可少的,也是固定流程;keras处理数据、搭建模型都是相对简单的,一般只需要Tokenizer、pad_sequences。本文将介绍keras对文本进行预处理的流程,并举出实例来探究其中详细过程。数据本文实验数据来源于苏剑林收集分享的两万多条中文标注语料,涉及六个领域...
2019-08-26 22:20:29
1381
2
原创 python笔记--max函数操作
python笔记–max/min函数操作前言在平时使用max和min函数时,往往只用到了其中最简单的操作,之后敲代码的时候需要通过value的最大值返回所对应的key值,发现max/min函数还有进阶操作,故在此记录。max函数max函数机制和min函数机制是一样的,这里只介绍max函数。#max函数语法max(iterable, *[, key, default])max(arg1...
2019-08-23 22:58:19
1216
原创 NLP中的Embedding层
NLP笔记–embedding层前言菜鸟要开始做笔记了。。。之前一直想要做笔记,一直拖拖拖到现在。做笔记的目的是为了和大家分享一下自己的学习过程,希望能够帮到需要的同学;还有一点就是自己发现学过的东西记不住,忘得快,所以也希望通过这种方式重复学习,把自己掌握的东西讲出来。争取从一个菜鸟成为大菜鸟,加油!Embedding在NLP中,Embedding可以说是必不可少的;由于计算机并不认识...
2019-08-20 22:28:20
2073
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅