一文说清「virtualdom」的含义与实现 - 编程思维

专注前端与算法的系列干货分享,欢迎关注(¬‿¬):「微信公众号:心谭博客」| xin-tan.com | GitHub 摘要 随着 React 的兴起,Virtual DOM 的原理和实现也开始出现在各大厂面试和社区的文章中。其实这种做法早在 d3.js 中就有实现,是 react 生态的快速建立让它正式进入了广大开发者的视角。 在正式开始前,抛出几个问题来引导思路,这些问题也会在不同的小节中

数栈技术分享:利用 atomic 构建 react 项目工作流,so easy! - 编程思维

​数栈是云原生—站式数据中台PaaS,我们在github和gitee上有一个有趣的开源项目:FlinkX,FlinkX是一个基于Flink的批流统一的数据同步工具,既可以采集静态的数据,也可以采集实时变化的数据,是全域、异构、批流一体的数据同步引擎。大家喜欢的话请给我们点个star!star!star!github开源项目:https://github.com/DTStack/fl...gitee

python算法引入 - 编程思维

[TOC] 这里主要是算法的介绍以及一些判断算法好坏的标准和方式 引入 如果a+b+c = 1000,且a^2 + b^2 = c^2,如何求出所有a,b,c可能的组合? 第一次尝试: import time print("开始") start_time = time.time() for a in range(1001): for b in range(1001): f

14. 最长公共前缀-----leetcode刷题(python解题) - 编程思维

[TOC] 题目 **编写一个函数来查找字符串数组中的最长公共前缀。** 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。说明: 所有输入只包含小写字母 a-z 。 来源:力扣(LeetCode)

leetcode 1:两数之和 - 编程思维

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1] 方法1,暴力解法。

滑动窗口算法 - 编程思维

参考文章:leetcode438题解答 0x00:前言 leetcode上有好几道个子字符串有关的题目,两天前看到一题要求找到字符串中所有字母异位词,题目大致意思是有s和p两个字符串,找出s中和p字母相同但顺序可以不相同的子字符串,并返回这些子串的起始索引。 例子:输入:s: "cbaebabacd" p: "abc"输出:[0, 6]解释:起始索引等于 0 的子串是 "cba", 它是 "a

来谈谈贪心算法 - 编程思维

前言 之前讲了动态规划,在翻阅资料的时候看到了不少谈论贪心算法的,这两种算法也很有相似之处,正好最近又做到了有关贪心的题,所以今天写篇文章来谈一谈。 贪心算法(英语:greedy algorithm),又称贪婪算法,是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。贪心算法在有最优子结构的问题中尤为有效。最优子结构的意思是局部最优解能决定全局

好程序员python学习路线分享实现快速排序算法 - 编程思维

  好程序员Python学习路线分享实现快速排序算法快速排序算法是一种基于交换的高效的排序算法,由C.R.A.Hoare于1962年提出,是一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide and conquer algorithm)。 分治法的基本思想 将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。 快

合并二叉树(python3) - 编程思维

题目要求:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。 解决思想:遇到二叉树,首先想到的是递归实现。为了降低空间消耗,两个二叉树合并为一个时,不再新建树。初始给定两个树的当前结点(根结点)t1、t2,

汉明距离(python3) - 编程思维

问题提出:两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 2^31。 解题思路:对两数进行二进制求解(使用递归算法),然后从两个二进制的末尾比较每一位是否相等,如果其中一个二进制数全部遍历,判断另一个二进制数是否遍历完,若未遍历完,遍历剩下位数,其中位数如果为1,则汉明距离+1。(因为之前遍历

翻转二叉树(python3) - 编程思维

提出问题:翻转一棵二叉树。(除根结点以外)原始二叉树: 新二叉树: 解题思路:遇见二叉树先想到递归。从最下层的叶子结点开始置换左右子节点,一直置换到到最上层的根结点的左右节点为止。 代码如下( ̄▽ ̄): # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # s

二叉树的最大深度(python3) - 编程思维

问题提出:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。 解决思路:递归法求解。从根结点向下遍历,每遍历到子节点depth+1。 代码实现( ̄▽ ̄): # Definition for a binary tree node. # class TreeNode: # def __init__(self, x):

只出现一次的数字(python3)不使用额外空间 - 编程思维

提出问题:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。要求:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 解题思路:使用异或运算解决。异或运算规则:1.相同数字进行异或运算结果为0。2. 0与任何数进行异或运算结果为该数字。比如[4,1,1] 4与1异或为5,5与1异或为4,最终输出4为正确答案。所以算法先设定最终输出

合并两个有序链表(python3) - 编程思维

提出问题:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4 解决思路:合并链表很简单,设置两个指针遍历两个链表,同时遍历并比较大小,如果1链表的当前节点值较小,将该节点添加到新链表中,1链表遍历指针后移一位,直到两个

将二叉搜索树换为累加树(python3) - 编程思维

提出问题:给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。 解决思路:使用新的遍历方式(右子树,根、左子树)遍历整棵树。设置全局变量累加值,再逐一更新节点。 代码如下( ̄▽ ̄): # Definition for a binary tree node. # class Tree

两数相加(python3) - 编程思维

提出问题:给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因

无重复字符的最长子串(python3) - 编程思维

提出问题:给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 示例:"abbcc" --> "ab" or "bc"、"abcadef" --> "adef" 解决思路:使用蛮力算法算法很容易实现,但是时间复杂度为O(n^2)。本题可以通过一次遍历完成,比如"abcadef",正常遍历,如果当前遍历字符不在字符串中,将它添加至字符串;当遍历到第2个a时,发现重复,此时截取第

全排列(python3) - 编程思维

题目描述:给定一个没有重复数字的序列,返回其所有可能的全排列。 示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 解题思路: 代码如下: class Solution: def permute(self, nums: List[int]) -> List[List[int]]: se

组合总和(python3) - 编程思维

题目描述:给定一个无重复元素的数组 candidates 和一个目标数 target ,找出candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。  示例 1:输入: candidates = [2,3,6,7], target = 7,所求解集为:[[7],[