自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(137)
  • 问答 (1)
  • 收藏
  • 关注

原创 java关于wait()和notify()方法

java并发

2022-08-22 20:56:04 486 1

原创 关于java的静态分派和动态分派

先下结论:静态分派是根据方法参数的静态类型(外观类型)在编译期决定方法的特征签名;动态分派是根据方法接受者的实际类型在运行时决定具体调用哪个方法。public static Father{}public static Son extends Father{}Father a=new Son();Employee b=new Manager();a.methodTest(b);//这里会产生一个invokevirtual字节码指令,参数为常量池中指向的A::methodTest(Empl.

2022-05-05 15:33:21 448

原创 核心卷I第八章p319页

class DateInterval extends Pair<LocalDate>{public LocalDate getSecond(){return (Date)super.getSecond().clone();}}LocalDate getSecond()//defined in DateIntervalObject getSecond()//overrides the method defined in Pair to call the first method.

2022-04-19 14:38:19 695

原创 核心卷I 第六章

P249页,编译器会给外围类添加access$0方法但是我用java17的javap指令发现外围类没有这个方法为什么啊?package innerClass;import java.util.Date;import javax.swing.JOptionPane;public class InnerClassTest { public static void main(String[] args) { TalkingClock clock= new TalkingClock(1

2022-04-15 21:00:50 141

原创 JAVA传参其实是按变量存储单元的内容进行的值传递

以变量a为例:若a是基本数据类型(比如int a=3),则a的存储单元中储存的是a的值即3;若a是对象引用,则a的存储单元中存储的是a的对象的引用,即对象指针;当发生显示传参时:public static facTest(int a)//或public static facTest(Employee a){ return a}不管a属于哪种类型的变量,方法读取的始终是a所在的存储单元的内容并生成副本(clone)...

2022-03-25 11:15:36 615

原创 leetcode第98题验证二叉搜索树--DFS

# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution(object): def isValidBST(self, root):.

2022-03-16 17:17:27 407

原创 leetcode第128题最长连续数列

要求时间复杂度O(n)其实思路比较简单,维护一个区间的集合(用的dict),如果当前扫描的数在集合中能够与某一个区间接壤(向前或向后):合并区间扫描当前数字如果出现过了:不管;如果没出现过:如果不与集合中的区间接壤,新增新区间,起始位置为当前元素,长度为0 如果与某个区间的前边界(或/和)后边界接壤,合并此元素和区间class Solution(object): def longestConsecutive(self,...

2022-03-12 10:13:00 139

原创 【leetcode每日一题】2022.03.08第2055题蜡烛间的盘子--前缀和+二分/正反扫描

前缀和是不是相当于dp啊?思路其实比较明显就是1:找到最靠近queries[left]右蜡烛和最靠近queries[right]的左蜡烛;2:计算两个蜡烛之间的盘子数。对于第一个问题可以采用二分,也可以正反扫描一次然后把每个蜡烛最近的盘子索引维护一个一维列表对于第二个问题就采用前缀和。即每个蜡烛都记录到自己为止所经过的盘子数,相减即得(所以这个算不算dp的范围呢)class Solution(object): def platesBetweenCandles(self.

2022-03-08 16:51:15 128

原创 【leetcode每日一题】2022.03.06第2100题适合打劫银行的日子--双指针,正反扫描取交集

取交集的时候用的是set&set不然速度真的过不了有一个10000长度的测试用例class Solution(object): def goodDaysToRobBank(self, security, time): """ :type security: List[int] :type time: int :rtype: List[int] 单调栈啊 双指针吧,递减的话就右指针动,碰到合.

2022-03-06 19:10:45 164

原创 leetcode第106题从中序与后序遍历序列构造二叉树

跟前序中序一样的 改一下代码就可以了# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution(object): def bu.

2022-03-03 11:05:23 471

原创 leetcode第105题从前序与中序遍历序列构造二叉树--还原二叉树(递归)

# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution(object): def pathSum(self, root, tar.

2022-03-03 11:03:51 237

原创 leetcode第65题有效数字--DFA确定有限状态自动机

是不是这么写自动机的转移状态态麻烦了 啊,看看官方的代码吧class Solution(object): def isNumber(self, s): """ :type s: str :rtype: bool DFA啊 """ dict_state={ 0:[['1','2','3','4','5','6','7','8','9','0','+','-','.'],[1,1,1,1,1,1,1,1,1,1,2,2,3],True],#.

2022-02-19 14:42:28 125

原创 【leetcode每日一题】2022.02.17第688题骑士在棋盘上的概率--三维DP

所以现在没有人做题用深度优先了是么,都是起手dp了?而且这道题用的三维的dp真的有点子难class Solution(object): def knightProbability(self, n, k, row, column): """ :type n: int :type k: int :type row: int :type column: int :rtype: float 普通回溯,不过要算概率 不行啊 还是会超时,30步.

2022-02-19 11:11:43 146

原创 leetcode第84题柱状图中最大的矩形--单调栈

其实最开始是想写DP的也写出来了,但有一个测试用例全他妈是1,真的恶心,然后就用单调栈单调栈:如果当前值大于栈顶元素,出栈,直到栈顶元素均大于当前值,入栈。入栈坐标应该是多少?如果在入栈时栈不空直接就用自己的坐标;如果入栈时栈空就用刚出栈的栈顶指针坐标class Solution(object): def largestRectangleArea(self, heights): """ :type heights: List[int] :rtype: int

2022-02-18 09:02:35 282

原创 leetcode第89题格雷编码--镜像法

记住镜像法生成格雷码class Solution(object): def grayCode(self, n): """ :type n: int :rtype: List[int] 镜像法输出格雷码,这个要记住啊,就是每多一位镜像然后翻转 """ ans=[0] for bit in range(n): temp=ans[:] fo.

2022-02-15 16:49:47 299

原创 【leetcode每日一题】2022.02.15第1380题 矩阵中的幸运数--原地算法

这个题跟矩阵置零好像啊,都是可以用第一行和第一列来记录状态原地算法,使用第一列来记录每一行的最小值,不需要额外开销,但是最后会修改matrix[0][0]class Solution(object): def luckyNumbers (self, matrix): """ :type matrix: List[List[int]] :rtype: List[int] 好像那个原地算法矩阵置零啊 """.

2022-02-15 16:19:32 134

原创 【leetcode每日一题】2022.02.14第540题 有序数组中的单一元素--二分查找

二分查找写递归就没什么意义了,写个非递归的class Solution(object): def singleNonDuplicate(self, nums): """ :type nums: List[int] :rtype: int """ def bin_search(l,r): mid =(l+r)/2 if nums[mid]==nums[mid-1]:

2022-02-15 10:34:35 209

原创 leetcode第42题接雨水--双指针

写写思路:存水一定是在两个峰中间,且两个最高峰之间存的水位一定是最高!那我们就把峰高和峰位置记录下来成为list_top,从最高到低遍历list_top: 如果当前峰在已经处理的峰之外(idx_top<l or idx>r),在当前峰和边界之间存水操作,直到遍历完所有的峰否则不处理继续处理下一个峰。所以需要用到双指针来确定已经处理过的峰,初始l=r=idx_top(-1)(最高峰)class Solution(obje...

2022-02-15 09:28:54 308

原创 leetcode第93题复原 IP 地址--DFS(回溯)

这个题还是普通型回溯算法,问题就是在解决先导0的写法上,我直接用的step对应的上限和下限,举个例子:如果step==0,说明只读一个单位长度的字符,所以范围在0~9(其实就是没限制);但是如果step==1,说明读入两个单位长度字符,转成的数字最小是10就可以解决先导0;同样step==2,读入三个字符,转数字最小是100解决先导0,但是最大是255class Solution(object): def restoreIpAddresses(self, s): .

2022-02-13 00:34:08 1148

原创 leetcode第102题二叉树的层序遍历--回溯算法(DFS)

# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution(object): deepth=0 def levelOrder.

2022-02-12 12:24:37 274

原创 【leetcode每日一题】2022.02.09第2006题 差的绝对值为 K 的数对数目--hashmap

class Solution(object): def countKDifference(self, nums, k): """ :type nums: List[int] :type k: int :rtype: int 暴力?dict吧 """ ans=0 dict_temp={} for i in nums: if dict_.

2022-02-12 12:04:21 220

原创 【leetcode每日一题】2022.02.12第1020题飞地的数量--回溯算法

class Solution(object): ans = 0 def numEnclaves(self, grid): """ :type grid: List[List[int]] :rtype: int 也没复杂到用自动机 """ m=len(grid[0]) n=len(grid) def DFS(i,j): if i>=0 .

2022-02-12 11:14:31 337

原创 【leetcode每日一题】2022.02.11第1984.题学生分数的最小差值排序+滑动窗口

简单题中的简单题,思路真的太明显了class Solution(object): def minimumDifference(self, nums, k): """ :type nums: List[int] :type k: int :rtype: int 排序+滑动窗口 """ nums.sort() ans=nums[k-1]-nums[0] .

2022-02-11 22:04:44 282

原创 【leetcode每日一题】2022.02.10第1447题最简分数--欧几里得算法,更相减损算法

就是很神奇的觉得只要不存在于dict中的数值就是最简分数,加进去。class Solution(object): def simplifiedFractions(self, n): """ :type n: int :rtype: List[str] 分母1~n,分子,1~n然后去掉不是最简的(用dict记录,key为分数值,value为字符串) """ ans={} if n==1

2022-02-11 21:57:28 316

原创 leetcode第91题解码方法--递归,动态规划

不让用递归,但是我们先把递归放在这里。class Solution(object): def numDecodings(self, s): """ :type s: str :rtype: int recursion[j]=recursion[j-1]+recursion[j-2] 前导0 """ n=len(s)-1 def recursion(n): .

2022-02-11 14:20:05 231

原创 leetcode第60题排列排序--DFS(但是应该是有别的更快的办法,所以先放递归版的代码)

class Solution(object): count=0 def getPermutation(self, n, k): stack_ans=[] sign=[[True] for i in range(n)] def DFS(deepth): if deepth==n: self.count+=1 if self.count==k: .

2022-02-10 16:51:25 141

原创 leetcode第59题螺旋矩阵 II--DFA(确定有限状态自动机)

54题的姐妹题,非常顺手了class Solution(object): def generateMatrix(self, n): state_dict={ "right":[0,+1,'down'], "down":[+1,0,"left"], "left":[0,-1,"up"], "up":[-1,0,"right"] } matrix=[[F.

2022-02-10 16:07:54 158

原创 leetcode第54题螺旋矩阵--DFA(确定有限状态自动机)

感觉这种题用自动机很方便啊class Solution(object): def spiralOrder(self, matrix): ans=[] m=len(matrix) n=len(matrix[0]) dict={'up':[-1,0,'right'], 'down':[+1,0,'left'], 'left':[0,-1,'up'], .

2022-02-10 16:06:04 184

原创 leetcode第80题删除有序数组中的重复项 II--双指针(快慢指针)

检查快指针就可以了,为了保证只重复一次设置一个标记变量repeat。class Solution(object): def removeDuplicates(self, nums): repeat=False fast=slow=1 while fast<len(nums): if nums [fast]!=nums [fast-1]: nums[slow]=nums[fast] .

2022-02-10 16:04:11 391

原创 leetcode第82题 删除排序链表中的重复元素 II

普通链表修改,没有什么太多可以说的# Definition for singly-linked list.# class ListNode(object):# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution(object): def deleteDuplicates(self, head): """ .

2022-02-10 16:01:33 149

原创 leetcode第79题单词搜索--DFS+剪枝

DFS和剪枝的操作已经写的很顺手了class Solution(object): def exist(self, board, word): Length=len(board[0])-1 Broad=len(board)-1 sign=[[False]*len(board[0]) for y in board] def DFS(i,j,n): if n==len(word):#最后一层直接返回正确 .

2022-02-09 14:50:28 299

原创 leetcode第74题搜索二维矩阵--二分查找

搜索二维矩阵实际就是二维化的排序数组,因此使用二分查找就能实现(O)log n,做好二维数组索引和数组索引的转换就可以了class Solution(object): def searchMatrix(self, matrix, target): if target==matrix[0][0]or target==matrix[-1][-1]:return True n=len(matrix[0]) l=0 r=len(matr.

2022-02-08 11:11:01 262

原创 leetcode第92题反转链表--头插法(迭代)

反转链表就用头插法# Definition for singly-linked list.# class ListNode(object):# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution(object): def reverseBetween(self, head, left, right): """.

2022-02-08 11:06:31 91

原创 leetcode第88题合并两个有序数组--双指针

注意循环结束条件# coding=utf-8# This is a sample Python script.# Press Shift+F10 to execute it or replace it with your code.# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.class Solution:class Solution(obje.

2022-02-08 11:04:39 202

原创 leetcode第86题分隔链表--尾插法

反转链表:头插法,保持原次序,尾插法# Definition for singly-linked list.# class ListNode(object):# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution(object): def partition(self, head, x): """ .

2022-02-08 11:02:02 66

原创 leetcode第31题下一个排列

下一个排列的顺序实际就是排序好的深度优先遍历class Solution(object): def nextPermutation(self, nums): """ """ left = 0 right = 0 middle = 0 for i in range(len(nums)-1)[::-1]: if nums[i]>=nums[i+1]:

2022-02-08 10:59:23 6155

原创 leetcode第77题组合--DFS、迭代(栈)

class Solution(object): def combine(self, n, k): stack_temp=[] stack_re=[] def DFS(j,deepth): if deepth==k+1: stack_re.append(stack_temp[:]) else: for i in range(j,n+1): .

2022-02-08 10:56:48 223

原创 leetcode第29题两数相除--快速乘算法(贪心算法)

class Solution(object): def divide(self, dividend, divisor): Min_Int=-2 ** 31 Max_Int=2**31-1 times=1 Divisor2Quotient=[] sign=1 if dividend<0:sign=-1 if divisor<0:sign=sign*-1 divi.

2022-01-24 19:53:02 225

原创 leetcode第27题移除元素--快慢指针

class Solution(object): def removeElement(self, nums, val): slow=fast=0 n=len(nums) while fast<n and slow<n: if nums[slow]==val: if nums[fast]!=val: nums[slow] = nums[fast].

2022-01-24 16:30:25 464

原创 leetcode第26题--快慢指针

没啥好说的其实class Solution(object): def removeDuplicates(self, nums): if len(nums)<2:return len(nums) fast=1 slow=0 n=len(nums) while fast<n: if nums[fast]!=nums[slow]: slow+=1 .

2022-01-24 10:51:39 444

空空如也

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

TA关注的人

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