auto commit
This commit is contained in:
parent
d0b613b899
commit
e7cc438071
@ -747,7 +747,6 @@ private class Position {
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
### DFS
|
||||
|
||||
<div align="center"> <img src="../pics//f7f7e3e5-7dd4-4173-9999-576b9e2ac0a2.png"/> </div><br>
|
||||
@ -1875,7 +1874,6 @@ private int rob(int[] nums, int s, int e) {
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
**信件错排**
|
||||
|
||||
题目描述:有 N 个 信 和 信封,它们被打乱,求错误装信的方式数量。
|
||||
@ -2457,12 +2455,10 @@ public int minDistance(String word1, String word2) {
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
**修改一个字符串称为另一个字符串** // TODO
|
||||
|
||||
[Leetcode : 72. Edit Distance (Hard)](https://leetcode.com/problems/edit-distance/description/)
|
||||
|
||||
|
||||
### 其它问题
|
||||
|
||||
**需要冷却期的股票交易**
|
||||
@ -2479,7 +2475,6 @@ s1[i] = max(s1[i - 1], s0[i - 1] - prices[i]); // Stay at s1, or buy from s0
|
||||
s2[i] = s1[i - 1] + prices[i]; // Only one way from s1
|
||||
```
|
||||
|
||||
|
||||
```java
|
||||
public int maxProfit(int[] prices) {
|
||||
if (prices == null || prices.length == 0) return 0;
|
||||
@ -2499,7 +2494,6 @@ public int maxProfit(int[] prices) {
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
**统计从 0 \~ n 每个数的二进制表示中 1 的个数**
|
||||
|
||||
[Leetcode : 338. Counting Bits (Medium)](https://leetcode.com/problems/counting-bits/description/)
|
||||
@ -2955,6 +2949,8 @@ public int[] productExceptSelf(int[] nums) {
|
||||
|
||||
**用栈实现队列**
|
||||
|
||||
[Leetcode : 232. Implement Queue using Stacks (Easy)](https://leetcode.com/problems/implement-queue-using-stacks/description/)
|
||||
|
||||
一个栈实现:
|
||||
|
||||
```java
|
||||
@ -3134,7 +3130,7 @@ public boolean isValid(String s) {
|
||||
}
|
||||
```
|
||||
|
||||
**数组中比当前元素大的下一个数组元素的距离**
|
||||
**数组中元素与下一个比它大的元素之间的距离**
|
||||
|
||||
```html
|
||||
Input: [73, 74, 75, 71, 69, 72, 76, 73]
|
||||
@ -3143,7 +3139,7 @@ Output: [1, 1, 4, 2, 1, 1, 0, 0]
|
||||
|
||||
[Leetcode : 739. Daily Temperatures (Medium)](https://leetcode.com/problems/daily-temperatures/description/)
|
||||
|
||||
使用栈来存储还未计算的元素。可以保证从栈顶向下元素递增,否则上面有一个比下面某个元素大的元素进入栈中,下面那个元素已经找到比它大的元素,因此会出栈。
|
||||
在遍历数组时用 Stack 把数组中的数存起来,如果当前遍历的数比栈顶元素来的大,说明栈顶元素的下一个比它大的数就是当前元素。
|
||||
|
||||
```java
|
||||
public int[] dailyTemperatures(int[] temperatures) {
|
||||
@ -3161,7 +3157,7 @@ public int[] dailyTemperatures(int[] temperatures) {
|
||||
}
|
||||
```
|
||||
|
||||
**数组中下一个比当前数大的数**
|
||||
**在另一个数组中比当前元素大的下一个元素**
|
||||
|
||||
[Leetcode : 496. Next Greater Element I (Easy)](https://leetcode.com/problems/next-greater-element-i/description/)
|
||||
|
||||
@ -3170,8 +3166,6 @@ Input: nums1 = [4,1,2], nums2 = [1,3,4,2].
|
||||
Output: [-1,3,-1]
|
||||
```
|
||||
|
||||
在遍历数组时用 Stack 把数组中的数存起来,如果当前遍历的数比栈顶元素来的大,说明栈顶元素的下一个比它大的数就是当前元素。
|
||||
|
||||
```java
|
||||
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
|
||||
Map<Integer, Integer> map = new HashMap<>();
|
||||
@ -3191,7 +3185,7 @@ public int[] nextGreaterElement(int[] nums1, int[] nums2) {
|
||||
}
|
||||
```
|
||||
|
||||
**循环数组中下一个比当前元素大的数**
|
||||
**循环数组中比当前元素大的下一个元素**
|
||||
|
||||
[Leetcode : 503. Next Greater Element II (Medium)](https://leetcode.com/problems/next-greater-element-ii/description/)
|
||||
|
||||
@ -3210,7 +3204,6 @@ public int[] nextGreaterElements(int[] nums) {
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## 哈希表
|
||||
|
||||
利用 Hash Table 可以快速查找一个元素是否存在等问题,但是需要一定的空间来存储。在优先考虑时间复杂度的情况下,可以利用 Hash Table 这种空间换取时间的做法。
|
||||
@ -3225,7 +3218,6 @@ Java 中的 **HashMap** 主要用于映射关系,从而把两个元素联系
|
||||
|
||||
HashMap 也可以用来对元素进行计数统计,此时键为元素,值为计数。和 HashSet 类似,如果元素有穷并且范围不大,可以用整型数组来进行统计。
|
||||
|
||||
|
||||
**数组中的两个数和为给定值**
|
||||
|
||||
[Leetcode : 1. Two Sum (Easy)](https://leetcode.com/problems/two-sum/description/)
|
||||
@ -3658,8 +3650,6 @@ public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
|
||||
|
||||
如果只是判断是否存在交点,那么就是另一个问题,即 编程之美:3.6 的问题。有两种解法:把第一个链表的结尾连接到第二个链表的开头,看第二个链表是否存在环;或者直接比较第一个链表最后一个节点和第二个链表最后一个节点是否相同。
|
||||
|
||||
|
||||
|
||||
**链表反转**
|
||||
|
||||
[Leetcode : 206. Reverse Linked List](https://leetcode.com/problems/reverse-linked-list/description/)
|
||||
@ -4481,7 +4471,6 @@ private void inorder(TreeNode node, int k) {
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
### Trie
|
||||
|
||||
<div align="center"> <img src="../pics//5c638d59-d4ae-4ba4-ad44-80bdc30f38dd.jpg"/> </div><br>
|
||||
@ -4826,7 +4815,6 @@ public int singleNumber(int[] nums) {
|
||||
|
||||
diff &= -diff 得到出 diff 最右侧不为 0 的位,也就是不存在重复的两个元素在位级表示上最右侧不同的那一位,利用这一位就可以将两个元素区分开来。
|
||||
|
||||
|
||||
```java
|
||||
public int[] singleNumber(int[] nums) {
|
||||
int diff = 0;
|
||||
@ -4954,4 +4942,3 @@ public int maxProduct(String[] words) {
|
||||
- 何海涛, 软件工程师. 剑指 Offer: 名企面试官精讲典型编程题[M]. 电子工业出版社, 2014.
|
||||
- 《编程之美》小组. 编程之美[M]. 电子工业出版社, 2008.
|
||||
- 左程云. 程序员代码面试指南[M]. 电子工业出版社, 2015.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user