auto commit
This commit is contained in:
parent
463af22ce5
commit
ff2fce91e0
@ -60,7 +60,7 @@
|
|||||||
* [51. 数组中的逆序对](#51-数组中的逆序对)
|
* [51. 数组中的逆序对](#51-数组中的逆序对)
|
||||||
* [52. 两个链表的第一个公共结点](#52-两个链表的第一个公共结点)
|
* [52. 两个链表的第一个公共结点](#52-两个链表的第一个公共结点)
|
||||||
* [53 数字在排序数组中出现的次数](#53-数字在排序数组中出现的次数)
|
* [53 数字在排序数组中出现的次数](#53-数字在排序数组中出现的次数)
|
||||||
* [54. 二叉搜索树的第 k 个结点](#54-二叉搜索树的第-k-个结点)
|
* [54. 二叉搜索树的第 K 个结点](#54-二叉搜索树的第-k-个结点)
|
||||||
* [55 二叉树的深度](#55-二叉树的深度)
|
* [55 二叉树的深度](#55-二叉树的深度)
|
||||||
* [56. 数组中只出现一次的数字](#56-数组中只出现一次的数字)
|
* [56. 数组中只出现一次的数字](#56-数组中只出现一次的数字)
|
||||||
* [57.1 和为 S 的两个数字](#571-和为-s-的两个数字)
|
* [57.1 和为 S 的两个数字](#571-和为-s-的两个数字)
|
||||||
@ -2090,7 +2090,7 @@ private void merge(int[] nums, int first, int mid, int last) {
|
|||||||
else if (nums[i] < nums[j]) tmp[k] = nums[i++];
|
else if (nums[i] < nums[j]) tmp[k] = nums[i++];
|
||||||
else {
|
else {
|
||||||
tmp[k] = nums[j++];
|
tmp[k] = nums[j++];
|
||||||
this.cnt += mid - i + 1; // a[i] > a[j],说明 a[i...mid] 都大于 a[j]
|
this.cnt += mid - i + 1; // nums[i] > nums[j],说明 nums[i...mid] 都大于 nums[j]
|
||||||
}
|
}
|
||||||
k++;
|
k++;
|
||||||
}
|
}
|
||||||
@ -2116,7 +2116,7 @@ B: b1 → b2 → b3
|
|||||||
|
|
||||||
设 A 的长度为 a + c,B 的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a。
|
设 A 的长度为 a + c,B 的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a。
|
||||||
|
|
||||||
当访问 A 链表的指针访问到链表尾部时,令它从链表 B 的头部开始访问链表 B;同样地,当访问 B 链表的指针访问到链表尾部时,令它从链表 A 的头部开始访问链表 A。这样就能控制访问 A 和 B 两个链表的指针能同时访问到交点。
|
当访问 A 链表的指针访问到链表尾部时,令它从链表 B 的头部重新开始访问链表 B;同样地,当访问 B 链表的指针访问到链表尾部时,令它从链表 A 的头部重新开始访问链表 A。这样就能控制访问 A 和 B 两个链表的指针能同时访问到交点。
|
||||||
|
|
||||||
```java
|
```java
|
||||||
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
|
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
|
||||||
@ -2175,7 +2175,7 @@ private int getLastK(int[] nums, int K) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
# 54. 二叉搜索树的第 k 个结点
|
# 54. 二叉搜索树的第 K 个结点
|
||||||
|
|
||||||
## 解题思路
|
## 解题思路
|
||||||
|
|
||||||
@ -2240,7 +2240,7 @@ public void FindNumsAppearOnce(int[] array, int num1[], int num2[]) {
|
|||||||
|
|
||||||
## 题目描述
|
## 题目描述
|
||||||
|
|
||||||
输入一个递增排序的数组和一个数字 S,在数组中查找两个数,是的他们的和正好是 S,如果有多对数字的和等于 S,输出两个数的乘积最小的。
|
输入一个递增排序的数组和一个数字 S,在数组中查找两个数,使得他们的和正好是 S,如果有多对数字的和等于 S,输出两个数的乘积最小的。
|
||||||
|
|
||||||
## 解题思路
|
## 解题思路
|
||||||
|
|
||||||
@ -2273,9 +2273,8 @@ public ArrayList<Integer> FindNumbersWithSum(int[] array, int sum) {
|
|||||||
public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
|
public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
|
||||||
ArrayList<ArrayList<Integer>> ret = new ArrayList<>();
|
ArrayList<ArrayList<Integer>> ret = new ArrayList<>();
|
||||||
int start = 1, end = 2;
|
int start = 1, end = 2;
|
||||||
int mid = sum / 2;
|
|
||||||
int curSum = 3;
|
int curSum = 3;
|
||||||
while (start <= mid && end < sum) {
|
while (start <= sum / 2 && end < sum) {
|
||||||
if (curSum > sum) {
|
if (curSum > sum) {
|
||||||
curSum -= start;
|
curSum -= start;
|
||||||
start++;
|
start++;
|
||||||
@ -2315,25 +2314,22 @@ public String ReverseSentence(String str) {
|
|||||||
if (str.length() == 0) return str;
|
if (str.length() == 0) return str;
|
||||||
int n = str.length();
|
int n = str.length();
|
||||||
char[] chars = str.toCharArray();
|
char[] chars = str.toCharArray();
|
||||||
int start = 0, end = 0;
|
int i = 0, j = 0;
|
||||||
while (end <= n) {
|
while (j <= n) {
|
||||||
if (end == n || chars[end] == ' ') {
|
if (j == n || chars[j] == ' ') {
|
||||||
reverse(chars, start, end - 1);
|
reverse(chars, i, j - 1);
|
||||||
start = end + 1;
|
i = j + 1;
|
||||||
}
|
}
|
||||||
end++;
|
j++;
|
||||||
}
|
}
|
||||||
reverse(chars, 0, n - 1);
|
reverse(chars, 0, n - 1);
|
||||||
return new String(chars);
|
return new String(chars);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reverse(char[] c, int start, int end) {
|
private void reverse(char[] c, int i, int j) {
|
||||||
while (start < end) {
|
while(i < j) {
|
||||||
char t = c[start];
|
char t = c[i]; c[i] = c[j]; c[j] = t;
|
||||||
c[start] = c[end];
|
i++; j--;
|
||||||
c[end] = t;
|
|
||||||
start++;
|
|
||||||
end--;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@ -2347,22 +2343,19 @@ private void reverse(char[] c, int start, int end) {
|
|||||||
## 解题思路
|
## 解题思路
|
||||||
|
|
||||||
```java
|
```java
|
||||||
public String LeftRotateString(String str, int k) {
|
public String LeftRotateString(String str,int n) {
|
||||||
if(str.length() == 0) return "";
|
if(str.length() == 0) return "";
|
||||||
char[] c = str.toCharArray();
|
char[] c = str.toCharArray();
|
||||||
reverse(c, 0, k - 1);
|
reverse(c, 0, n - 1);
|
||||||
reverse(c, k, c.length - 1);
|
reverse(c, n, c.length - 1);
|
||||||
reverse(c, 0, c.length - 1);
|
reverse(c, 0, c.length - 1);
|
||||||
return new String(c);
|
return new String(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reverse(char[] c, int i, int j) {
|
private void reverse(char[] c, int i, int j) {
|
||||||
while(i < j) {
|
while(i < j) {
|
||||||
char t = c[i];
|
char t = c[i]; c[i] = c[j]; c[j] = t;
|
||||||
c[i] = c[j];
|
i++; j--;
|
||||||
c[j] = t;
|
|
||||||
i++;
|
|
||||||
j--;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
Loading…
x
Reference in New Issue
Block a user