寻找一个数(基本的二分搜索)

int binary_search(int[] nums, int target) {
int left = 0, right = nums.length - 1;
while(left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] < target) {
left = mid + 1;
} else if (nums[mid] > target) {
right = mid - 1;
} else if(nums[mid] == target) {
// 直接返回
return mid;
}
}
// 直接返回
return -1;
}
阅读全文 »

leetcode 76. 最小覆盖子串

给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。

示例:

输入: S = “ADOBECODEBANC”, T = “ABC”
输出: “BANC”
说明:

阅读全文 »

全排列、子集、组合

leetcode 46. 全排列

给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:

阅读全文 »

排序算法对比

算法 时间复杂度 是稳定排序? 是原地排序?
冒泡排序 o(n^2)
插入排序 o(n^2)
选择排序 o(n^2)
快速排序 o(nlog(n))
归并排序 o(nlog(n))
桶排序 o(n+k) k是数据范围
计数排序 o(n)
基数排序 o(dn) d是维度
堆排序 O(nlogn)
阅读全文 »

表达式匹配

leetcode 10.正则表达式匹配

给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。

‘.’ 匹配任意单个字符
‘*’ 匹配零个或多个前面的那一个元素
所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。

说明:

  • s 可能为空,且只包含从 a-z 的小写字母。
  • p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。
    阅读全文 »