算法
算法题记录
flystar27
这个作者很懒,什么都没留下…
展开
-
算法|合并两个有序数组
力扣第88题:https://leetcode-cn.com/problems/merge-sorted-array/题目描述:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你合并 nums2 到 nums1 中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应原创 2021-11-17 11:16:41 · 1053 阅读 · 0 评论 -
算法|找出不同的二进制字符串
力扣第255场周赛题目刷题链接:https://leetcode-cn.com/problems/find-unique-binary-string/题目描述:给你一个字符串数组 nums ,该数组由 n 个 互不相同 的二进制字符串组成,且每个字符串长度都是 n 。请你找出并返回一个长度为 n 且 没有出现 在 nums 中的二进制字符串。如果存在多种答案,只需返回 任意一个 即可。示例 1:输入:nums = [“01”,“10”]输出:“11”解释:“11” 没有出现在 num原创 2021-08-22 17:54:39 · 280 阅读 · 0 评论 -
算法|找出数组的最大公约数
力扣第255场周赛题目刷题链接:https://leetcode-cn.com/problems/find-greatest-common-divisor-of-array/题目描述:给你一个整数数组 nums ,返回数组中最大数和最小数的 最大公约数 。两个数的 最大公约数 是能够被两个数整除的最大正整数。示例 1:输入:nums = [2,5,6,9,10]输出:2解释:nums 中最小的数是 2nums 中最大的数是 102 和 10 的最大公约数是 2分析:当两数中大数除小数原创 2021-08-22 17:48:41 · 1841 阅读 · 0 评论 -
选择排序|冒泡排序
时间复杂度先介绍一个概念,时间复杂度。一个操作如果和样本的数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。时间复杂度为一个算法流程中,常数操作数量的一个指标。常用O(读作big O)来表示。具体来说,先要对一个算法流程非常熟悉,然后去写出这个算法流程中,发生了多少常数操作,进而总结出常数操作数量的表达式。在表达式中,只要高阶项,不要低阶项,也不要高阶项的系数,剩下的部分如果为f(N),那么时间复杂度为O(f(N))。评价一个算法流程的好坏,先看时间复杂度的指标,然后再分析不同数据样本下原创 2021-08-26 22:40:56 · 117 阅读 · 0 评论 -
算法|使用特殊打字机键入单词的最少时间
力扣第59场双周赛题目刷题链接:https://leetcode-cn.com/problems/minimum-time-to-type-word-using-special-typewriter/题目描述:有一个特殊打字机,它由一个 圆盘 和一个 指针 组成, 圆盘上标有小写英文字母 ‘a’ 到 ‘z’。只有 当指针指向某个字母时,它才能被键入。指针 初始时 指向字符 ‘a’ 。每一秒钟,你可以执行以下操作之一:将指针 顺时针 或者 逆时针 移动一个字符。键入指针 当前 指向的字符。给你原创 2021-08-22 17:43:10 · 299 阅读 · 0 评论 -
二叉树遍历——迭代算法
二叉树的遍历除了递归算法外还有迭代算法,采用具有后进先出特点的栈来实现。前序遍历:根 左 右public static void preOrder(TreeNode root) { if(root != null) { Stack<TreeNode> stack = new Stack<TreeNode>(); stack.add(root);//入栈 while( !stack.isEmpty()) { root = stack.pop();//出栈原创 2021-08-18 21:37:25 · 256 阅读 · 0 评论 -
二叉树遍历——递归算法
前序遍历:根 左 右public static void preOrder(TreeNode root) { if(root == null) { return ; } //根 左 右 //第一次成为栈顶元素时打印 System.out.println(root.val); preOrder(root.left); preOrder(root.right); }中序遍历:左 根 右public static void midpreOrder(TreeNode原创 2021-08-18 21:16:32 · 611 阅读 · 0 评论 -
贪心算法|最长连续递增序列
题目描述给定一个未经排序的整数数组,找到最长且连续递增的子序列,并返回该序列的长度。解题分析返回序列的下标是连续的,从0开始寻找递增序列,记录递增序列的最后一个下标,然后从该下标继续寻找,记录长度,取长度最大的即可。(序列长度可通过两个标记作差得到)代码public static int findLength(int[] nums) { int ans = 0; int start = 0; for (int i = 0; i < nums.length; i++) { if (i原创 2021-08-18 22:28:22 · 188 阅读 · 0 评论 -
贪心算法|三角形的最大周长
题目描述给定由一些正数(代表长度)组成的数组 A ,返回由其中三个长度组成的、面积不为零的三角形的最大周长。如果不能形成任何面积不为零的三角形,返回 0 。解题分析因为要取最大值,所以要先从小到大排序,然后从最大处开始判断。假设最长边是最后下标,另外两条边是倒数第二和第三下标,则此时三角形周长最大n < (n-1) + (n-2),如果不成立,意味着该数组中不可能有另外两个值之和大于n,此时将n左移,重新计算。代码public int largestPerimeter(int[] A)原创 2021-08-18 22:42:52 · 918 阅读 · 0 评论 -
二叉树总结(含代码)
二叉树特点1.对于每个节点最大孩子树数量不超过22.对任意节点有且仅有一个父节点3.整棵树只有一个根完全二叉树只有最底层和次底层有叶子节点,且最底层叶子节点在最左边满二叉树除最后一层外,非叶子节点每个节点都有两个子节点;总节点数为2k-1(k为层数);每层节点数为2k-1;搜索二叉树左小右大(左孩子树比根小,右孩子树比根大)平衡二叉树任意一个节点的左右子树高度差不大于1平衡二叉树的缺点:有序数组的插入调整次数多,耗内存,损伤CPU,对计算机性能有影响红黑树1.心(根)是黑的2原创 2021-08-19 15:53:48 · 2665 阅读 · 0 评论 -
贪心算法|柠檬水找零
题目描述在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。必须给每个顾客正确找零注意,一开始你手头没有任何零钱。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。解题分析加入顾客给的是五元则无需找零,给十元时只能用五元找零,给二十元时有5*3和10+5两种找零方式,所以每收到一次钱的时候要首先判断其数值,然后再判断手里已有的五元和十元的数量,二十元的不涉及找零,所以不用考原创 2021-08-18 22:35:37 · 703 阅读 · 0 评论