Fork me on GitHub

Leetcode-075-颜色分类

Leetcode-075-颜色分类

思路:两次二分法查找

题目描述

  • 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
  • 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

经典的荷兰旗问题

1
2
3
4
5
6
7
注意:
不能使用代码库中的排序函数来解决这道题。

示例:

输入: [2,0,2,1,1,0]
输出: [0,0,1,1,2,2]
阅读更多...

网络-长短连接

网络-长/短连接

前言

先看网络上文章都是怎么写的

  • http长连接和短连接
  • HTTP1.0协议不支持长连接,从HTTP1.1协议以后,连接默认都是长连接

  • 网络上很多文章都是误人子弟,根本没有说明白这个概念。这里要强调一下,HTTP协议是基于请求/响应模式的,因此只要服务端给了响应,本次HTTP连接就结束了,或者更准确的说,是本次HTTP请求就结束了,根本没有长连接这一说。那么自然也就没有短连接这一说了。

  • 之所以网络上说HTTP分为长连接和短连接,其实本质上是说的TCP连接。TCP连接是一个双向的通道,它是可以保持一段时间不关闭的,因此TCP连接才有真正的长连接和短连接这一说。

  • HTTP协议说到底是应用层的协议,而TCP才是真正的传输层协议,只有负责传输的这一层才需要建立连接。

  • 实际上,说HTTP请求和HTTP响应会更准确一些,而HTTP请求和HTTP响应,都是通过TCP连接这个通道来回传输的。

阅读更多...

Leetcode-面试题16.11-跳水板

Leetcode-面试题 16.11. 跳水板

题目描述

你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。

返回的长度需要从小到大排列。

示例:

1
2
3
4
5
输入:
shorter = 1
longer = 2
k = 3
输出: {3,4,5,6}

提示:

  • 0 < shorter <= longer
  • 0 <= k <= 100000
阅读更多...

JUC-15-线程和进程总结

JUC-15-线程和进程总结

1. 进程和线程

根本区别:进程操作系统资源分配的基本单位,而线程任务调度和执行的基本单位

1.1 进程

  • 一个在内存中应用的程序,每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。

mark

阅读更多...

二分查找-合集总结

二分查找-合集总结

(本系列是针对Leetcode上常见的二分查找题目进行总结。)

总体思想:把待搜索的目标值留在最后判断,在循环体内不断地把不符合题目要求的子区间排除掉,在退出循环以后,因为只剩下 1 个数没有看到,它要么是目标元素,要么不是目标元素,单独判断即可。

用这种思路写二分不容易出错,需要考虑的细节最少

  • 这种思路也非常符合“二分”这个名字,就是把【待搜索的区间】分为【有目标元素的区间】和【不包含目标元素的区间】,排除掉【不包含目标元素的区间】,剩下的就是有【目标元素的区间】。
  • 初学写二分查找的问题是:跳步厉害,写下 left = mid 或者 right = mid - 1 等代码的时候,一定要搞清楚是什么意思,必要的时候写上注释,帮助自己思考和以后复查代码。
  • 算法问题建议更多地理解思想,思考为什么这样写,而不建议背代码,背模板。即使要用代码和模板,例如并查集、线段树这种,也应该先把它们保存到自己的 github 代码仓库里,要用的时候去复制粘贴。

PS:分类是liweiwei老哥总结好的,在他的分类下,下文将以自己的思想将题目串通总结起来。

二分总结链接https://leetcode-cn.com/problems/search-insert-position/solution/te-bie-hao-yong-de-er-fen-cha-fa-fa-mo-ban-python-/

1. 题目分类

「力扣」上的二分查找问题主要有这三类题型。

一、在数组中查找符合条件的元素的索引

一般而言这个数组是有序的,也可能是半有序的,但不大可能是无序的。

题目 提示与题解
704. 二分查找 二分查找的模板问题,使用本题解介绍的方法就要注意,需要“后处理”。
34. 在排序数组中查找元素的第一个和最后一个位置 查找边界问题,题解(有视频讲解)
33. 搜索旋转排序数组 题解
81. 搜索旋转排序数组 II 题解
153. 寻找旋转排序数组中的最小值 题解
154. 寻找旋转排序数组中的最小值 II 题解
300. 最长上升子序列 二分查找的思路需要理解,代码很像第 35 题,题解
275. H指数 II 题解
1095. 山脉数组中查找目标值 题解
852. 山脉数组的峰顶索引(简单)
658. 找到 K 个最接近的元素(中等) 题解,这个问题二分的写法需要做复杂的分类讨论,可以放在以后做。
4. 寻找两个有序数组的中位数 官方题解(有视频讲解)题解

二、在一个有上下界的区间里搜索一个整数

题目 提示与题解
69. 平方根 在一个整数范围里查找一个整数,也是二分查找法的应用场景,题解
287. 寻找重复数 题解。在一个整数范围里查找一个整数。
374. 猜数字大小 题解
1300. 转变数组后最接近目标值的数组和 题解

三. 判别条件是一个函数

题目 提示与题解
278. 第一个错误的版本
410. 分割数组的最大值 经典问题,判别函数的写法很有技巧,题解
658. 找到 K 个最接近的元素 题解
875. 爱吃香蕉的珂珂 题解
1300. 转变数组后最接近目标值的数组和 题解
阅读更多...

LCP-22-黑白方格画阶

LCP-22-黑白方格画

题目描述

  • 小扣注意到秋日市集上有一个创作黑白方格画的摊位。摊主给每个顾客提供一个固定在墙上的白色画板,画板不能转动。画板上有 n * n 的网格。绘画规则为,小扣可以选择任意多行以及任意多列的格子涂成黑色,所选行数、列数均可为 0。
  • 小扣希望最终的成品上需要有 k 个黑色格子,请返回小扣共有多少种涂色方案。

注意:两个方案中任意一个相同位置的格子颜色不同,就视为不同的方案。

1
2
3
4
5
6
7
8
9
10
11
示例 1:

输入:n = 2, k = 2

输出:4

解释:一共有四种不同的方案:
第一种方案:涂第一列;
第二种方案:涂第二列;
第三种方案:涂第一行;
第四种方案:涂第二行。
1
2
3
4
5
6
7
示例 2:

输入:n = 2, k = 1

输出:0

解释:不可行,因为第一次涂色至少会涂两个黑格。
1
2
3
4
5
6
7
示例 3:

输入:n = 2, k = 4

输出:1

解释:共有 2*2=4 个格子,仅有一种涂色方案。
阅读更多...
  • © 2019-2022 Zhuuu
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信