算法
StringKai
这个作者很懒,什么都没留下…
展开
-
算法题:求数组中唯一出现n次的数字,其他数字都出现了m次——通用解法
1、求数组中每个数字的二进制形式的各位出现 1 的次数,如: [1010, 1100, 1011] 各位出现 1 的次数为 [3, 1, 2, 1] 2、当出现 1 的次数可被 m 整除时,所求整数的这一位为 0 ,否则为 1,可得所求数字的二进制形式 3、二进制形式转十进制形式,得到结果 ...原创 2020-08-06 23:46:55 · 484 阅读 · 0 评论 -
二叉树先序,中序,后序遍历 非递归形式
import java.util.HashSet; import java.util.Set; import java.util.Stack; public class BinaryTreeTraversal { //先序 public static void preOrder(TreeNode root) { TreeNode node = root; ...原创 2020-04-05 20:25:32 · 206 阅读 · 0 评论 -
小米OJ 6.交叉队列 深度优先遍历解法
网上有用动态规划解这题的,代码量比较大. 我这里用 深度优先遍历 写更简单一些. 思路就是很常见的思路. 具体流程: 如果 s1[i] 和 s2[j] 都不等于 s3[i+j] , 说明无解 , 返回false. 如果s1[i] 等于 s3[i+j] , 递归判断 s1[i+1] , s2[j] 和 s3[i+j+1] 的关系. 如果s2[j] 等于 s3[i+j] , 递...原创 2020-03-21 20:54:05 · 189 阅读 · 0 评论 -
leetcode 404. 左叶子之和 详细题解
两种不同形式的递归解法 两个解法都是基于递归的,只是形式不一样. 解法一需要一个全局变量,和一个额外的getSum()函数.这种写法的好处是使代码更加清晰易懂. 解法二则不需要额外的全局变量和函数. 总之两种写法思想都差不多,运行时间都是100%.具体代码分析请看注释. 解法一 int res = 0;//存储结果 public int sumOfLeftLeaves(TreeNode root...原创 2019-05-09 21:16:42 · 252 阅读 · 0 评论 -
LeetCode 443. 压缩字符串
前言 此题要求使用原地算法求解,即将压缩结果存在原chars[]数组中. 使用双指针即可求解此题.这里我们称由相同字符组成的字符串为相同字符序列. 指针t指示已压缩的结果的末尾,指针i指示未压缩字符串的开头. 遇到相同的字符,指针i便向后滑动,直到遇到不同字符.指针i滑动的距离即为相同字符序列的长度. 具体过程及解析如下: public int compress(char[] chars) { ...原创 2019-05-15 23:26:32 · 418 阅读 · 0 评论 -
LeetCode 1005. K 次取反后最大化的数组和 (Java-超越99.66%.详细解析)
题目 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。) 以这种方式修改数组后,返回数组可能的最大和。 解题思路 (1).K>0则执行(2),否则执行(4) (2).取数组A[]中的最小值,并取反. (3).K–. (4).对数组A[]求和 注意点 第(2)步取最小...原创 2019-05-23 20:33:40 · 180 阅读 · 0 评论