update sequence
This commit is contained in:
@@ -1,4 +1,20 @@
|
|||||||
# 数值
|
# 数值
|
||||||
|
|
||||||
|
|
||||||
|
`n&(n-1)` 作用是消除数字 n 的二进制表示中的最后一个 1
|
||||||
|
|
||||||
|
|
||||||
|
一个数和它本身做异或运算(^)结果为 0,即 `a ^ a = 0`
|
||||||
|
|
||||||
|
|
||||||
|
不用临时变量交换两个数
|
||||||
|
|
||||||
|
```
|
||||||
|
int a = 1, b = 2;
|
||||||
|
a ^= b;
|
||||||
|
b ^= a;
|
||||||
|
a ^= b;
|
||||||
|
// 现在 a = 2, b = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,21 @@ int binary_search(int *a,int length,int k){
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
注意细节
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
如果搜索有序数列是 `[1,2,2,2,2,3]` 这种,想得到 target 的左侧边界,即索引 1,或者我想得到 target 的右侧边界,即索引 4 ; 这时候怎么处理呢?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 分块查找
|
## 分块查找
|
||||||
|
|
||||||
块内无序,块之间有序;可以先二分查找定位到块,然后再到块中顺序查找。
|
块内无序,块之间有序;可以先二分查找定位到块,然后再到块中顺序查找。
|
||||||
|
|||||||
@@ -28,5 +28,6 @@
|
|||||||
|
|
||||||
#### 其它案例
|
#### 其它案例
|
||||||
|
|
||||||
最短路径
|
* 最短路径
|
||||||
|
* 0-1 背包问题
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 八皇后问题
|
## 八皇后问题
|
||||||
|
|
||||||
8x8的国际象棋棋盘上放置8个皇后,使得任何一个皇后都无法直接吃掉其他的皇后。任意2个皇后都不能处于同一个 横线,纵线,斜线上。
|
8x8的国际象棋棋盘上放置8个皇后,使得任何一个皇后都无法直接吃掉其他的皇后。任意2个皇后都不能处于同一个 横线,纵线,斜线上。
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
1) 确定递归公式
|
1) 确定递归公式
|
||||||
2) 确定边界条件
|
2) 确定边界条件
|
||||||
|
|
||||||
|
> 自顶向下的递归,自底向上是迭代
|
||||||
|
|
||||||
## 斐波那契数列
|
## 斐波那契数列
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@
|
|||||||
* 随机数
|
* 随机数
|
||||||
* 进制转换:位运算
|
* 进制转换:位运算
|
||||||
* 大数问题
|
* 大数问题
|
||||||
|
* 公倍数
|
||||||
|
* 素数
|
||||||
|
|
||||||
|
|
||||||
## ipv4 转 int
|
## ipv4 转 int
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
# 数值-加减乘除
|
# 数值-加减乘除
|
||||||
|
|
||||||
|
|
||||||
|
* 等差数列
|
||||||
|
* 阶乘
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 求1+2+…+n
|
## 求1+2+…+n
|
||||||
|
|
||||||
@@ -48,17 +52,11 @@ char[] factorial(int n){
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## 1024! 末尾有多少个0?
|
||||||
|
|
||||||
## 实现两个正整数的除法(和取模)
|
分析:
|
||||||
|
末尾0的个数取决于2和5的个数
|
||||||
编程实现两个正整数的除法,当然不能用除法操作符。
|
能被2整除的数比能被5整除的数要多得多,因此只统计被5整除的数的个数
|
||||||
```
|
|
||||||
int div(const int x, const int y)
|
|
||||||
```
|
|
||||||
|
|
||||||
1. 循环减被除数,减到不能再减,当除数很大,被除数小时,效率很低
|
|
||||||
2. 位运算
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -74,6 +72,22 @@ int div(const int x, const int y)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 实现两个正整数的除法(和取模)
|
||||||
|
|
||||||
|
编程实现两个正整数的除法,当然不能用除法操作符。
|
||||||
|
```
|
||||||
|
int div(const int x, const int y)
|
||||||
|
```
|
||||||
|
|
||||||
|
1. 循环减被除数,减到不能再减,当除数很大,被除数小时,效率很低
|
||||||
|
2. 位运算
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 两个数相乘,小数点后位数没有限制,请写一个高精度算法
|
## 两个数相乘,小数点后位数没有限制,请写一个高精度算法
|
||||||
|
|
||||||
|
|
||||||
@@ -81,13 +95,4 @@ int div(const int x, const int y)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 1024! 末尾有多少个0?
|
|
||||||
|
|
||||||
分析:
|
|
||||||
末尾0的个数取决于2和5的个数
|
|
||||||
能被2整除的数比能被5整除的数要多得多,因此只统计被5整除的数的个数
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
# 数值-素树
|
||||||
|
|
||||||
|
> 如果一个数如果只能被 1 和它本身整除,那么这个数就是素数
|
||||||
|
|
||||||
|
|
||||||
|
## 返回区间 [2, n) 中有几个素数
|
||||||
|
|
||||||
|
```
|
||||||
|
int countPrimes(int n)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -11,12 +11,30 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 合并2个有序数列
|
||||||
|
|
||||||
|
|
||||||
|
合并2个有序数列 A 和 B, 其中 A 有足够的空间,也就是把B合并进A数组
|
||||||
|
|
||||||
|
如
|
||||||
|
```
|
||||||
|
A = [4,5,6]
|
||||||
|
B = [1,2,7]
|
||||||
|
合并后
|
||||||
|
A = [1,2,4,5,6,7]
|
||||||
|
```
|
||||||
|
|
||||||
|
思路1:
|
||||||
|
思路2:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 两个序列和之差最小
|
## 两个序列和之差最小
|
||||||
|
|
||||||
有两个序列a,b,大小都为n,序列元素的值任意整数,无序;
|
有两个序列a,b,大小都为n,序列元素的值任意整数,无序;
|
||||||
要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
|
要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
|
||||||
|
|
||||||
例如:
|
例如:
|
||||||
```
|
```
|
||||||
var a=[100,99,98,1,2, 3];
|
var a=[100,99,98,1,2, 3];
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
# 数列-查找
|
# 数列-查找
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 数组中超过出现次数超过一半的数字
|
## 数组中超过出现次数超过一半的数字
|
||||||
|
|
||||||
题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。
|
题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。
|
||||||
@@ -24,6 +21,22 @@
|
|||||||
类似问题:找出数组中唯一的重复元素
|
类似问题:找出数组中唯一的重复元素
|
||||||
|
|
||||||
|
|
||||||
|
## 查找只出现一次的元素
|
||||||
|
|
||||||
|
给一个非空整数数组,比如 [2, 2, 3] ,其余元素均出现2次,找出那个只出现一次的元素。
|
||||||
|
|
||||||
|
思路: 异或运算,成对儿的数字就会变成 0,落单的数字和 0 做异或还是它本身
|
||||||
|
|
||||||
|
```
|
||||||
|
int singleNumber(vector<int>& nums) {
|
||||||
|
int res = 0;
|
||||||
|
for (int n : nums) {
|
||||||
|
res ^= n;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## 数组中找出某数字出现的次数
|
## 数组中找出某数字出现的次数
|
||||||
|
|
||||||
@@ -113,7 +126,6 @@ Lin=< aK1,ak2,…,akm >,其中k1< k2<…< km且aK1< ak2<…< akm。
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 在从1到n的正数中1出现的次数
|
## 在从1到n的正数中1出现的次数
|
||||||
|
|
||||||
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。
|
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。
|
||||||
|
|||||||
Reference in New Issue
Block a user