
算法
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
cjh-Java
不积跬步,无以至千里
展开
-
重建二叉树(前中序 + 递归)
lettcode题目地址 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 思路: 前序遍历的数组按照 【根节点 | 左子树 | 右子树】排列 中序遍历的数组按照 【左子树 | 根节点 | 右子树】排列 因为数组中的节点值不重复,所以我们可以根据前序遍历的首节点值,来确定在中序遍历序列中的根节点值位置。 然后确定当前原创 2020-09-15 10:00:59 · 390 阅读 · 0 评论 -
快速排序(分治思想+首尾双指针)
快速排序:可以将区间第一个数作为基准,然后创建首尾双指针和用于表示基准数被哪个指针所指的标志变量。哪个指针指着基准数,那么这个指针在当前循环就处于不移动状态(移动该指针,就是丢失了该基准数);另外一个指针前进一格。 一直到首指针大于尾指针。递归的出路也是 ...原创 2020-08-22 07:17:07 · 456 阅读 · 0 评论 -
最长回文子串(动态规划)
要明确的一点是:一个长度大于等于3的回文串,去掉首尾两个字母以后,剩下的也是一个回文串。所以我们可以用 dp[ i ][ j ] = true OR false 来表示字符串第 i 个字符到第 j 个字符组成的串是否是回文串。 所以状态转移方程就是: dp[ i ][ j ] = dp[ i + 1 ][ j - 1 ] && s[ i ] == s[ j ] (dp[ i + 1 ][ j - 1 ] 就是 dp[ i ][ j ] 去掉首尾字母以后的串) 以上的方程都是基于 i 到 j原创 2020-08-22 14:58:20 · 653 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面-剑指21
LeetCode 题目地址 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 实现思路:使用首尾双指针的方法,当首指针遇到偶数时,交换首尾指针的元素,尾指针前进一格,首指针不动(因为此时能够确定的是尾指针是偶数,不能确定首指针是否为奇数);当首指针遇到奇数时,首指针前进一格。一直循环到首尾指针相遇停止。 程序结构包括:一个循环,两个判断 class Solution { public int[] exchange(int[] num原创 2020-08-21 08:54:17 · 378 阅读 · 0 评论 -
找出数组中出现次数超过数组长度一半的数字-剑指39
LeetCode 题目地址 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 考虑采用阵地攻守的思想: 1、先假设极端情况下 所有众数在守阵地,然后其他元素攻击阵地,以1换1的方式攻击阵地。那么显然是攻不下阵地的,因为众数的数量已经超过了一半。 2、具体实现:让第一个数作为守阵地的元素x,标记守阵地人数sum=1,遇到相同元素,守阵地人数就+1,否则就-1。当守阵地人数为0时,让下一个元素来守阵地,直到遍历完数组,当前守阵地的元素就是所原创 2020-08-21 07:53:18 · 719 阅读 · 0 评论