自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Python实现TCP通信

服务器监听端口,等待客户端连接发送消息给客户端接受客户端的消息import threadingimport socketclass TcpServer: def __init__(self): self.ip = '127.0.0.1' self.port = 985 self.tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.tcp

2021-05-17 18:43:47 5498 2

原创 Java IO表格

2020-09-22 17:28:27 131

原创 leetcode 406.根据身高重建队列

题目假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对 (h, k) 表示,其中 h 是这个人的身高,k 是排在这个人前面且身高大于或等于 h 的人数。 编写一个算法来重建这个队列。题目解析该题为给出一组 N*2 的数组,设每个数组的格式为 [m, n],对 N 个数组进行排序,最终形成一个 伪升序序列 ,该序列不完全按照 m 升序,而是在升序的基础上,该数组前面有 n 个数组的 m 值大于该数组的 m 值。题解1、首先对数组按照如下规则排序:①对每一个数组 [m,n] , 首先按照数

2020-09-20 11:42:01 127

原创 leetcode 238.除自身以外数组的乘积

方法一对于每一个数,分别计算左边的累乘值和右边的累乘值,之后再将他们相乘,即可得到答案。public int[] productExceptSelf(int[] nums) { int[] res = new int[nums.length]; for (int i = 0; i < res.length; i++) { int left = 1; for (int j = 0; j < i; j++) { left *= nums[j]; } int righ

2020-09-14 15:43:31 76

原创 leetcode 155.最小栈

private class Node { private int val; Node left; Node right; private Node(int val) { this.val = val; }}private Node head = new Node(0);private Node min = new Node(0); public MinStack() { }

2020-09-03 21:48:49 78

原创 leetcode 152.乘积最大子数组

题目给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。题解对于一个数组的累乘,我们会发现以下规律:1、正数越多,累乘值必然越大;2、若出现负值,则当前值若为正值,累乘后会变成最小值;当前值若为负值,则会转化为最大值;3、若当前值为0,无论累乘多少值,都为0,因此,若读取到0,则保存当前状态最大值,重新进行累乘计算;程序设计由于正值越多,累乘值越大;负值会使得数据产生突变,由负值变成正值,正值变成负值;0会使得累乘值归零

2020-09-03 20:02:57 85

原创 leetcode 105.从前序遍历与中序遍历序列构造二叉树

题目根据一棵树的前序遍历与中序遍历构造二叉树。注:你可以假设树中没有重复的元素。题解示例数组:preorder: [3, 9, 20, 15, 7]inorder: [9, 3, 15, 20, 7]结果:使用递归进行构建,算法如下:1、将前序数组的第一个值构建根节点 Root;2、分割 inorder 数组,分割点为根节点,在示例中以3为节点分割,不包含3,具体分割为 inorder_left 和 inorder_right;3、分割 preorder 数组,去除第一个元素,截取

2020-08-22 17:28:39 203

原创 leetcode 98.验证二叉搜索树

题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。题解本题可按照中序遍历,通过比较当前数与上一个数的大小来确定是否是二叉搜索树,代码如下:Integer k;public boolean isValidBST(TreeNode root) { boolean b1 = true, b2 = true; boolean b; if(roo

2020-08-22 10:25:10 94

原创 eclipse配置Spring

1、从eclipse下载Spring工具进入 help – install new software… ,如下图:点击 add ,按以下方式输入:Name : SpringLocation : http://dist.springsource.com/release/TOOLS/update/e4.10/之后点击 add ,等待一会儿会出现安装列表,我们选择带有 IDE 的四个组件进行安装。安装完成后重启客户端。二、下载Spring framework以及commons-loggin

2020-08-20 16:02:12 3780 1

原创 leetcode 78.子集

题解(1)初始化 List 为空集;(2)遍历 nums ,对每一个 nums 中的数,进行一下操作:    ①将该数作为一个子集加入 List ;    ②将该数添加到每一个已有的子集中,形成新的子集,将新的子集添加到 List 中;注:第二层循环不可使用List.size()函数,添加的子集需要是新的完全复制public List<List<Integer>> subsets(int[]

2020-08-17 22:28:57 81

原创 leetcode 75.颜色分类

public void sortColors(int[] nums) { int head = 0; int end = nums.length - 1; int i = 0; while( i <= end ) { if( nums[i] == 0) { if( i == head) { i++; continue; } nums[i] = nums[head]; nums[head] = 0; head++; continue;

2020-08-17 13:48:06 79

原创 leetcode 72.编辑距离

题目给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符题解1、将 word1 转换为 word2 所使用的最小操作数,等同于将 word2 转换为 word1 所使用的最小操作数。因此, 插入 和 删除 操作其本质上是同一种操作类型;2、对于 word1 中的字母,在 word2 中可能会出现以下情况:(1)不存在该字母;(2)存在该字母但相对位置不对

2020-08-16 14:33:12 74

原创 leetcode 70.爬楼梯

private static Map<Integer, Integer> m = new HashMap<Integer, Integer>();// 递归public int climbStairs(int n) { if(n == 0) { return 0; } if(n == 1) { return 1; } if(n == 2) { return 2; } if(m.containsKey(n)) { return m.get(n);

2020-08-14 13:22:30 78

原创 leetcode 62.不同路径

题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?题解一:递归public int uniquePaths(int m, int n) { if( m == 1) { return 1; } if(n == 1) { return 1; } return this.uniquePaths(m-1, n) + this

2020-08-13 11:27:51 97

原创 leetcode 55.跳跃游戏

public boolean canJump(int[] nums) { int end = nums.length - 1; for(int i = nums.length-2; i>=0; i--) { if(i + nums[i] >= end) { end = i; } } if(end == 0) { return true; }else { return false; }}

2020-08-11 20:49:46 62

原创 leetcode 48.旋转图像

题目题解矩阵旋转90°,理论上是矩阵的4个数据块进行相互的替换,只要切割出这四个数据块,并且对其中的每一个数进行遍历,循环替换即可。我们设该矩阵为 n*n 矩阵,将矩阵划分为四块,如下图:我们仅需将涂颜色的区块顺时针与其他对应区块替换一周,即可得到想要的矩阵,其替换关系如下:因此,我们的代码呼之欲出:public void rotate(int[][] matrix) { for(int i = 0; i < matrix.length/2 + 1; i++) { for(

2020-08-11 10:51:26 89

原创 leetcode 46.全排列

public List<List<Integer>> permute(int[] nums) { List<List<Integer>> lists = new ArrayList<List<Integer>>(); List<Integer> list = new ArrayList<Integer>(); int[] used = new int[nums.length]; if(nums.lengt

2020-08-10 23:20:53 82

原创 leetcode 42.接雨水

题目给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。题解能够接到雨水,则肯定是盆状的设计。因此,我们只需要找到2端较高柱子的位置,就可以计算出在这2个区域内能够接到多少的雨水。由于同时寻找2个较高的柱子比较难以实现,且可能存在多个盆装的地形,因此,我们首先寻找出这些柱子的最高点 heightest ,再进行讨论。当我们找到最高点 heightest 时,分别 从左往最高点遍历 和 从右往最高点遍历 ,这2种遍历都遵循以下规则:①定义指针 tmp

2020-08-10 19:46:46 144

原创 leetcode 39.组合总和

题目给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。题解1、将 candidates 从小到大排列;2、采取深度优先的递归遍历策略。其递归格式如下:输入: List<List<Integer>> :结果集、 List<Integer> :当前单个结果、 target :目标值、 nums :当前广度的遍历位

2020-08-10 15:45:54 72

原创 leetcode 33.搜索旋转排序数组

题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。题解利用二分法分割数组,分割成的2个数组必为 一个有序数组 和 一个无序数组 。在有序数组中,查看 target 是否在有序数组中,否则就是在无序数组中。缩小数组范围后,继续二分

2020-08-09 17:29:23 75

原创 leetcode 31.下一个排列

题目实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。题目分析1、字典序含义在数学中,字典或词典顺序(也称为词汇顺序,字典顺序,字母顺序或词典顺序)是基于字母顺序排列的单词按字母顺序排列的方法。 这种泛化主要在于定义有序完全有序集合(通常称为字母表)的元素的序列(通常称为计算机科学中的单词)的总顺序。对于数字1、2、3…n的排列,不同排列的先后关系是

2020-08-08 22:28:18 163

原创 leetcode 22.括号生成

题目给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。解析循环添加左括号,保证左括号的添加次数少于n。每次添加左括号后,分别进行添加左括号(个数少于n时)和添加右括号操作,每次添加操作完成后进行判断: 若当前左括号和右括号匹配且左括号个数为n,则输出该序列代码: private List<String> result = new ArrayList(); public List<String> generateParenthe

2020-08-07 15:28:37 60

原创 leetcode 21.合并两个有序链表

题目将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。题解对2个链表分别使用指针进行操作,初始化指针指向头部位置。新建头部指针 head ,让这2个有序链表串联到该指针后续位置,方便返回值。比较2指针所指元素的大小,小的元素放到 head 的后面,然后后移一位,直至末尾。最后将未比较的链表接入 head 后续,完成合并。public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNod

2020-08-07 13:46:59 99

原创 leetcode 19.删除链表倒数第n个节点

题目给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。题解使用双指针进行标记,指针间拉开间隔n,待后指针到达末尾,删除前指针所在的位置即可。注意边界条件判断的添加即可。public ListNode removeNthFromEnd(ListNode head, int n) { if(head.next == null) { return null; } ListNode preA = head; ListNode A = head; ListNode

2020-08-07 12:50:09 114

原创 leetcode 17.电话号码的字母组合

题目给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。题解首先给出数字对应字母的映射:数字字母2a、b、c3d、e、f4g、h、i5j、k、l6m、n、o7p、q、r、s8t、u、v9w、x、y、z利用递归函数,对数字进行递归求解。分割字符串 "23456…" 为 "2" 、 "3456…" ,对单个字符串 "2" 寻找其对应的字

2020-08-06 11:52:30 67

原创 leetcode 15.三数之和

题目给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 *a,b,c ,*使得 a + b + c = 0 找出所有满足条件且不重复的三元组。题解一我们很容易就想到,将数组中每三个之间进行一次遍历计算,则可得到累加和为一的数组。对得到的数组进行排序后比较,则可去除重复的答案。代码如下: public List<List<Integer>> threeSum(int[] nums) { List<List<Integer&g

2020-08-05 17:20:42 66

原创 数据结构——队列(Java)

定义队列是可以进行两端操作的线性表,一端入数据,一端出数据。队列的基础操作1、基础数据类型数据名称数据类型数据用途arrayint[]队列主体maxsizeint队列大小rearint队尾指针frontint队头指针2、基本函数操作(1)队列构造 public ArrayQueue(int arrMaxSize){ maxSize = arrMaxSize; array = new int[max

2020-08-04 17:49:09 89

原创 数据基础结构——栈(Java)

定义栈一个动态集合,仅允许在线性表一端进行数据的存取操作。栈的基础操作1、基础数值定义数值名称数值类型数值用途aint[]栈的主体sizeint栈的大小topint栈顶坐标2、基础函数操作(1)栈的构建public Stack(int maxsize) { //构建初始栈大小 this.size = maxsize; this.a = new int[size]; this.top = -1;}(2)栈顶元素查询

2020-08-04 16:49:36 96

原创 leetcode 11.盛水最多的容器

题目给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。题解一1、定义求水域大小的函数area(),用来计算当前水域的大小。public int area(int a, int b, int a_index, int b_index) { if(a >

2020-08-04 16:21:16 73

原创 leetcode 632.最小区间

题目你有 k 个升序排列的整数数组。找到一个最小区间,使得 k 个列表中的每个列表至少有一个数包含在其中。我们定义如果 b-a < d-c 或者在 b-a == d-c 时 a < c,则区间 [a,b] 比 [c,d] 小。题解大纲思路如下:1、定义一个当前最优解的数组 R,格式为 [x, y] ;2、定义一个迭代数列 D,长度为k,格式为 [ x1, x2, x3, …, xk ] ;3、首先,取出每一个数组中最小的数放入迭代数列 D 中,计算当前最优解的值 R ;4、之

2020-08-01 20:04:34 147

原创 leetcode 20.有效的括号

题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。题解ASCII码{:123 }:125[:91 ]:93(:40 ):411、新建栈,确认字符串是否为空,若非空则将第一个字符入栈2、开始对字符串进行遍历:2-1:若字符串与栈顶匹配,则出栈;2-2:若字符串与栈顶不匹配,则进行入栈操作2-2-1:入栈操作检测栈顶括号等

2020-07-31 17:59:58 90

原创 Java学习笔记1——String类详解

一、声明String str;二、初始化字符串1、利用char数组进行创建char[] a = ['a', 'b', 'c', 'd'];String str = new String(a);2、提取char数组一部分仅创建如下,从char数组a中第2个数开始提取2个字符,组成str:char[] a = ['a', 'b', 'c', 'd'];String str = new String(a, 1, 2);3、直接初始化String str;str = "abcd";

2020-07-31 17:46:36 172

原创 leetcode 315. 计算右侧小于当前元素的个数

题目给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。解析1、给定具体的nums:[1, 3, 5, 2, 1’, 4],当我们使用插入排序时,会发现如下特性(倒序插入):①[4]:移动0次;②[1’, 4]:移动0次;③[1’, 2, 4]:移动1次;④[1’, 2, 4, 5]:移动3次;⑤[1’, 2, 3, 4, 5]:移动2次;⑥[1, 1’, 2

2020-07-24 16:33:32 183

空空如也

空空如也

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

TA关注的人

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