剑指Offer-2
Day 1
JZ38:排列组合@next_permutation
public String[] permutation(String s) {
List<String> res = new ArrayList<String>();
char[] arr = s.toCharArray();
Arrays.sort(arr);//优先得到第一个排列
do {
res.add(new String(arr));
} while (next_permutation(arr));
int size = ret.size();
String[] ans = new String[size];
for (int i = 0; i < size; i++) {
ans[i] = ret.get(i);
}
return ans;
}
public boolean next_permutation(char[] nums) {
int len = nums.length;
for (int i = len - 1; i > 0; i--) {
if (nums[i] > nums[i - 1]) {//首先找到首个相邻递增对
Arrays.sort(nums, i, len);//直接升序
for (int j = i; j < len; j++) {//交换[i-1]与第一个大者
if (nums[j] > nums[i - 1]) {
char temp = nums[j];
nums[j] = nums[i - 1];
nums[i - 1] = temp;
return true;
}
}
}
}
//Arrays.sort(nums);//用于321->123
return false;JZ39:数组中频率超过一半的数字@快速排序与中位数
JZ40:数组中最小的k个数
TopK专题

Day2
JZ41:数据流的中位数@就地堆选取
JZ43:求1~N中数字1出现的次数
Day3
JZ47:数组中最大和路径@滚动dp
JZ48:最长不含重复字符的子字符串@滑动窗口
JZ49:丑数@指针就地dp
JZ50: 字符串首个只出现一次的字符@有序哈希
Day4
JZ51:逆序对数@归并排序
JZ52:链表公共节点
JZ53:有序数组频率查询
JZ54:BST的第k大节点@逆中序遍历
JZ55: 是否是AVL
Day5
JZ56:数组中数字出现的次数@分组位运算

JZ57:和为s的连续正数序列
Day 6
JZ60:n个骰子朝上点数和s概率@dp方向
JZ61:扑克牌中的顺子(王视为Any)
数字电路系列
Day7
JZ66:构建乘积数组

JZ68:二叉树的公共祖先
最后更新于
