大雁小鱼的博客

Talk is cheap,show me your code please.

常用查找算法总结

折半查找 public int bsearch(int[] arr,int left,int right,int v){ int m = 0; while(left < right){ m =(left+right)/2; if(arr[m] == v) { return m; } ...

第k小的数

求第K小的数 输入n个整数和一个正整数K,输出这些整数从小到大排序后的第K个数。n小于10的7次方 思路一 选择第K小的数,最显然的方法是先排序,然后直接输出下标为K-1的元素,但是由于n的规模比较大,可能性能不可接受。 最快的排序的时间复杂度: 思路二 使用半个快排。假设在快速排序的“划分”结束后,数组A[p..r]被划分为了A[p..q]和A[q+1..r],则可根据左边元素的个数...

经典题的经典解法总结

经典题的经典解法总结 背景 我见过许多优秀的题目的经典解法,很是佩服,同时也提高了自己的知识水平。这些解法的特点是简单,有些已经到了减无可减的地步。 我个人认为,对于这种,我们只能膜拜 + 硬背了,本篇博客就打算整理这些经典题的经典解法,以供大家学习。 第一题 求二叉树的高度 // 时间复杂度O(n),空间复杂度O(logn) class Solution { int maxDept...

二叉树基础知识总结

二叉树基础知识 二叉树的性质 性质1:二叉树第i层上节点最多为 性质2:高度为h的二叉树最多含有的节点数 性质2:包含n个结点的二叉树的高度至少为 性质4:任意一颗二叉树,其度为0的节点数量和度为2的节点数量的关系是

分表分库

分表分库 背景 一般地说,系统达到一定规模之后,必然带来数据量的大幅增加,同时数据库压力会越来越大,各种查询,各种统计需求不断涌来,此时单库已经很难满足 业务上的需要了,分表分库在所难免。如何分表分库是一门学问,也是一门艺术,学会它不容易。 影响 分表分库带来的好处自不必多说,我们今天来讨论一下分表分库带来的一些负面影响。 首先数据库一旦拆分,势必对DAO层的代码有影响,原本直接向某一台...

求x的平方根

LeetCode 第69题 求x的平方根 题目 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 思考 这道题一看到,作为程序员的我首先的反应是穷举,但是由于复杂度太高必定超时。我之前遇到过一些学数学的朋友,聊天的时候他们会说一些关于如何用程序计算某某公式的东西。 于是我百度了一下...

全排列算法(不含重复元素)

全排列算法(不含重复元素) 背景 全排列是一个比较经典和常见的问题,一些较大的公司可能会喜欢问这种经典算法问题。我希望通过这个博客来加深对全排列算法的理解,同时也归纳一下有多少种全排列的实现方法 注意:本篇博客讨论的是无重复元素的全排列算法 递归算法 说到全排列实现算法,最简单最容易让人想到的就是递归 递归思路 我们知道全排列的含义就是一个序列所有排序的可能性。我们可以用分治的思路来理...

Leetcode 盛最多水的容器

第11题 盛最多水的容器 题目 给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。画 n 条垂直线,使得垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 注意:你不能倾斜容器,n 至少是2。 题目地址:https://leetcode-cn.com/problem...

Leetcode题目 三数之和为0

LeetCode题目 三数之和为0 题目 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4] 满足要求的三元组集合为: [ [-1, 0, 1], [-...

Leetcode题目 两数之和

两数之和 题目: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 比如给定 nums = [2,7,11,15],target = 9 因为 nums[0] + nums[1] = 2 + 7 = 0 所以返回 [0,1] 这道题其实是一道挺简单的题,大多数人第一眼能想到的解法是穷举,遍历之后输出结果,代码如...