01背包问题
AcWing 2. 01背包问题题目说明有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。
第 ii 件物品的体积是 vi,价值是 wi。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出最大价值。
输入格式第一行两个整数,N,V用空格隔开,分别表示物品数量和背包容积。
接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 ii 件物品的体积和价值。
输出格式输出共一行,包含 n 个整数,表示排好序的数列。
数据范围0<N,V≤10000<vi,wi≤1000
输入样例:123454 51 22 43 44 5
输出样例:18
笔者理解此题是一道排序算法问题,在AcWing题库中被定义为简单题。
解法当笔者阅读完此题后,发现此题是最经典的背包的问题,也是比较经典的动态规划问题,让我们来看看具体如何实现的吧。
实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525 ...
连续的子数组和
力扣 523. 连续的子数组和题目说明
给你一个整数数组 nums 和一个整数 k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组:
子数组大小 至少为 2 ,且
子数组元素总和为 k 的倍数。
如果存在,返回 true ;否则,返回 false 。
如果存在一个整数 n ,令整数 x 符合 x = n * k ,则称 x 是 k 的一个倍数。
提示:
1 <= nums.length <= 10^5
0 <= nums[i] <= 10^9
0 <= sum(nums[i]) <= 2^31 - 1
1 <= k <= 2^31 - 1
示例示例 1:
123输入:nums = [23,2,4,6,7], k = 6输出:true解释:[2,4] 是一个大小为 2 的子数组,并且和为 6 。
示例 2:
1234输入:nums = [23,2,6,4,7], k = 6输出:true解释:[23, 2, 6, 4, 7] 是大小为 5 的子数组,并且和为 42 。 42 是 6 的倍数,因为 42 = 7 ...
链表的中间结点
力扣 876. 链表的中间结点题目说明
给定一个头结点为 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
提示:
给定链表的结点数介于 1 和 100 之间。
示例示例 1:
12345输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = NULL.
示例 2:
123输入:[1,2,3,4,5,6]输出:此列表中的结点 4 (序列化形式:[4,5,6])由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。
笔者理解此题是一道链表算法问题,在力扣题库中被定义为简单题。
解法当笔者阅读完此题后,发现此题比较简单,考察的是链表的知识,在这里我们用快慢指针来快速求解,让我们来看看具体如何实现的吧 ...
初识Redis
引入Nosql基本概念NoSQL最常见的解释是“non-relational”, “Not Only SQL”也被很多人接受。NoSQL仅仅是一个概念,泛指非关系型的数据库,区别于关系数据库,它们不保证关系数据的ACID特性。
它不能替代关系型数据库,只能作为关系型数据库的一个良好补充。
优点:
易扩展
高性能
大数据量、高性能
高可用
Nosql 分类不同分类特点对比:
分类
Examples举例
典型应用场景
数据模型
优点
缺点
键值(key-value)
Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB
内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。
Key 指向 Value 的键值对,通常用hash table来实现
查找速度快
数据无结构化,通常只被当作字符串或者二进制数据
列存储数据库
Cassandra, HBase, Riak
分布式的文件系统
以列簇式存储,将同一列数据存在一起
查找速度快,可扩展性强,更容易进行分布式扩展
功能相对局限
文档型数据库
CouchDB, ...
4的幂
力扣 342. 4的幂题目说明
给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4^x
提示:
-2^31 <= n <= 2^31 - 1
示例示例 1:
12输入:n = 16输出:true
示例 2:
12输入:n = 5输出:false
示例 3:
12输入:n = 1输出:true
笔者理解此题是一道位运算算法问题,在力扣题库中被定义为简单题。
解法当笔者阅读完此题后,发现此题比较简单,考察的是简单的位运算知识,让我们来看看具体如何实现的吧。
实现1234567891011121314151617public boolean isPowerOfFour(int n) { // 0和负数非4的幂 if(n < 1) { return false; } while(n > 1) { ...
2的幂
力扣 231. 2 的幂题目说明
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2^x ,则认为 n 是 2 的幂次方。
提示:
-2^31 <= n <= 2^31 - 1
示例示例 1:
123输入:n = 1输出:true解释:2^0 = 1
示例 2:
123输入:n = 16输出:true解释:2^4 = 16
示例 3:
12输入:n = 3输出:false
示例 4:
12输入:n = 4输出:true
示例 5:
12输入:n = 5输出:false
笔者理解此题是一道位运算算法问题,在力扣题库中被定义为简单题。
解法当笔者阅读完此题后,发现此题比较简单,考察的是简单的位运算知识,让我们来看看具体如何实现的吧。
实现123456789public boolean isPowerOfTwo(int n) { // 0和负数不是 if (n < 1) { retu ...
回文链表
力扣 234. 回文链表题目说明
请判断一个链表是否为回文链表。
进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
示例示例 1:
12输入: 1->2输出: false
示例 2:
12输入: 1->2->2->1输出: true
笔者理解此题是一道二维数组算法问题,在力扣题库中被定义为简单题。
解法当笔者阅读完此题后,发现此题的原地算法需要使用到快慢指针加反转链表,通过先找到中间节点,再对之后的链表进行反转,最后将反转后的链表和前面的进行比较,都相同的就是回文链表,让我们来看看具体如何实现的吧。
实现12345678910111213141516171819202122232425262728293031323334353637383940414243444546/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() { ...
元素和为目标值的子矩阵数量
力扣 1074. 元素和为目标值的子矩阵数量题目说明
给出矩阵 matrix 和目标值 target,返回元素总和等于目标值的非空子矩阵的数量。
子矩阵 x1, y1, x2, y2 是满足 x1 <= x <= x2 且 y1 <= y <= y2 的所有单元 matrix[x][y] 的集合。
如果 (x1, y1, x2, y2) 和 (x1', y1', x2', y2') 两个子矩阵中部分坐标不同(如:x1 != x1'),那么这两个子矩阵也不同。
提示:
1 <= matrix.length <= 100
1 <= matrix[0].length <= 100
-1000 <= matrix[i] <= 1000
-10^8 <= target <= 10^8
示例示例 1:
123输入:matrix = [[0,1,0],[1,1,1],[0,1,0]], target = 0输出:4解释:四个只含 0 的 1x1 子矩阵。
示例 2:
123输 ...
汉明距离总和
力扣 477. 汉明距离总和题目说明
两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。
计算一个数组中,任意两个数之间汉明距离的总和。
提示:
数组中元素的范围为从 0到 10^9。
数组的长度不超过 10^4。
示例示例 1:
1234567输入: 4, 14, 2输出: 6解释: 在二进制表示中,4表示为0100,14表示为1110,2表示为0010。(这样表示是为了体现后四位之间关系)所以答案为:HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6.
笔者理解此题是一道位运算算法问题,在力扣题库中被定义为中等题。
解法当笔者阅读完此题后,发现此题考察的是二进制数计算的性质,让我们来看看具体如何实现的吧。
实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748public int totalHamming ...
汉明距离
力扣 461. 汉明距离题目说明
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。
提示:
0 ≤ x, y < 2^31.
示例示例 1:
12345678910输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1)4 (0 1 0 0) ↑ ↑上面的箭头指出了对应二进制位不同的位置。
笔者理解此题是一道位运算算法问题,在力扣题库中被定义为简单题。
解法当笔者阅读完此题后,发现此题考察的是二进制数计算的性质,让我们来看看具体如何实现的吧。
实现12345678910111213public int hammingDistance(int x, int y) { int result = 0; // 通过异或求出两个数的不同位构成的数 int temp = x ^ y; while(temp != 0) { // 再将数通过逐位消除1来 ...








