首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

RefactoringGuru 代码异味和重构技巧总结

这些重构技术展示了如何在类之间安全地移动功能,创建新的类,以及隐藏实现细节以防公开访问。 移动方法 问题:一个方法在另一个类中使用的次数多于在它自己的类中使用的次数。...用对象替换数组 问题:你有一个包含各种类型数据的数组。 解决方案:将数组替换为每个元素都有单独字段的对象。 重复的被观测数据 问题:存储在类中的领域数据是否负责GUI?...用符号常量替换幻数 问题:你的代码使用了一个具有特定含义的数字。 解决方案:将这个数字替换为一个常量,该常量有一个人类可读的名称来解释数字的含义。 封装字段 问题:你有一个公共字段。...解决方案:从子类中删除字段,并将其移动到超类。 上移方法 问题:你的子类具有执行类似工作的方法。 解决方案:使方法相同,然后将它们移动到相关的超类。...上移构造器主体 问题:你的子类的构造器的代码基本相同。 解决方案:创建一个超类构造器,并将子类中相同的代码移动到它。在子类构造器中调用超类构造器。

1.9K40

75.颜色分类——题解(执行用时击败90% ,内存消耗击败 78%)

01 题目描述 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。...那有没有通过一次扫描就完成排列的方法呢?答案是:有! 问题1:思路是什么?...观察题目描述和题目示例的输出,0排在序列最前面,2排在序列最后面,因此,在扫描数组时,我们可以判断当前数字的值: 如果是0,就往数列前部移动; 如果是2,就往数列后部移动。 问题2:如何前移后移?...此时抛出另一个问题:往前部移动,移动到哪里呢?往后部移动,又移动到哪里呢? ——设置两个标记flag0和flag2。...就因为有两个标记flag0和flag2的存在,因为两个标记严格限定了0和2的边界,自然而言,两个边界之间的就是1了。

43620
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【基础算法】递归算法

    无论是递归算法还是递归函数,最大的特点都是“自己调用自己”。 斐波那契数列 斐波那契数列的规律是:第一项是1,第二项是1,以后每一项都等于前两项之和。我们的问题是:斐波那契数列的第n项是多少?...梵塔问题 ---- 有三根杆子A,B,C。A杆上有 N 个 (N>1) 穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至 C 杆: 每次只能移动一个圆盘; 大盘不能叠在小盘上面。...提示:可将圆盘临时置于 B 杆,也可将从 A 杆移出的圆盘重新移回 A 杆,但都必须遵循上述两条规则。 问:如何移?最少要移动多少次? ---- 题目分析 梵塔问题只能用递归算法来解决。...完成这三步就可以将A针上的64个圆盘全部移到C针上,而且在移动过程中始终保持大盘在下小盘在上的顺序。关键在于第1步和第3步如何执行。...=1,则要将问题继续分解,也就是递归地调用函数move()。

    37210

    数据结构与算法 -4、5 :两数相加&&两数之和

    其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。...无非注意一点就是: 本题是对链表的操作,即将两个链表对应节点数据加和存入另一个链表的对应节点 注意链表对应数据相加时的进位 以下给出C++和JavaScript两种解法,但是思路都一样,所以请读者自行选择适合自己的语言...再说另一个角度,从所给目标值的角度考虑,我们来说一句废话:要从一个数组中找两个数字满足其相加之和等于所给目标值,是不是等价于所给目标值是否可以被拆分成两个数组元素,那思路不就来了,先说第一个思路—-组合拆分...组合拆分 还记得上一篇推文(就是罗马数字与整数的相互转换那篇),我们提到了组合拆分的方法,即对于一个从大到小排序的数组,用目标值与数组元素逐一开始比较,当且仅当目标值大于或等于某一项数组元素时,此时用目标值减去当前数组元素...(target-nums[i]),然后用余数继续与当前数组元素的下一个数组元素进行比较,同样找出余数大于或等于数组元素的那一项,重复此操作,直至target被完全拆解或者数组元素遍历完成之后target

    73310

    通过示例学 Golang 2020 中文版【翻译完成】

    漂亮地打印结构变量 结构的导出和未导出字段 结构中的匿名字段 检查两个结构是否相等或结构相等性 访问和设置结构字段 嵌套结构 结构字段元数据或标记 结构与 JSON 的转换 如何初始化带有另一个嵌套结构的结构...如何初始化具有数组或切片字段的结构 如何从另一个包访问结构 方法 方法 方法的指针接收器 非结构类型的方法 方法链 接口 接口 将接口作为参数传递给函数 接口到结构 嵌入接口 接口比较 接口的好处...移除或去除字符串中的所有空格 编写多行字符串 字符串比较 检查字符串是否包含另一个字符串 分割字符串 从一个句子中获取所有单词 通过分隔符连接字符串 检查字符串是否以前缀开头 检查字符串是否以后缀结尾...迭代所有文件和文件夹中的路径 获取当前工作目录 触摸 Golang 中的文件 将文件从一个位置移动到另一个位置或命令mv 获取文件名、大小、权限位、模式、修改时间 制作文件的副本 文件夹/目录 创建目录或文件夹...在排序和旋转数组中搜索 查找排序数组中目标元素的第一个和最后一个位置 雨水收集问题 组合异序词 合并重叠间隔 排序 0、1 和 2 的数组 跳跃游戏 删除排序数组中的重复项 矩阵 螺旋矩阵问题 顺时针旋转对称矩阵或图像

    6.2K50

    2019高考编程卷:谷歌面试编程题及解题技巧(MIT版)

    问题 2:在数组中进行查找 给定一个已排序的整数数组,如何找出特定整数 x 的位置? 优秀答案:使用二分搜索法。将数组中间的数字与 x 进行比较。如果相同,则找出了 x。...问题 6:洗牌问题 给定一组不同的整数数组,给出一个算法对这些整数进行随机排序,使每个重排序方法的可能性相等。换句话说,给定一副牌,你要如何洗牌才能确保牌的每种排列方法有相同的可能?...问题 7:单链表中的循环 如何确定单链表是否有循环? 优秀答案:跟踪链表中的两个指针,并在链表的开始处启动它们。在算法的每轮迭代中,将第一个指针往前移一个节点,把第二个指针往前移两个节点。...一个普通的链表不会有循环。他们的意思是让你决定能否从一个图中的节点到达循环,该图包含最多有一条输出边的节点。 问题 8:计算 2^x 如何快速计算 2^x?...由于 15> 6,我们移动到右边的节点 12;由于 15>12,我们再次移动到正确的节点 15,最终找到了需要的数字。 要将元素加入二叉搜索树,我们就要像搜索元素一样,遵循从父节点到子节点的正确连接。

    97710

    jquery对象和dom对象的相互转换

    由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出。....innerHTML; 3、如何获取jQuery集合的某一项 对于获取的元素集合,获取其中的某一项(通过索引指定)可以使用eq或get(n)方法或者索引号获取,要注意,eq返回的是jquery对象,而...p元素单击事件分别设定不同的处理 jQuery中几个自定义的事件: (1)hover(fn1,fn2):一个模仿悬停事件(鼠标移动到一个对象上面 及移出这个对象)的方法。...当鼠标移动到一个匹配的元素上面时,会触发指定的第一个函数。当鼠标移出这个元素时,会触发指定的第二个函数。 //当鼠标放在表格的某行上时将class置为over,离开时置为out。...可以有多个参数(合并多项并返回) $.map(array, fn):数组映射。把一个数组中的项目(处理转换后) 保存到到另一个新数组中,并返回生成的新数组。

    3.3K40

    JQuery-命令速查-CheatSheet

    动态添加表单 获取 Jquery 对象数组中的所有文字 Jquery 对象的属性转为数组 Query select attributes into an array 页面控制 滚动到对应位置...(i, el) { console.log( $(el).text()); }).get(); Jquery 对象的属性转为数组 Query select attributes into an...可以对单个 Elem 进行滚动,或者对 window 进行滚动 可以滚动到对应 y 轴位置,数字作为参数,也可以滚动到对应 elem $('#BoxModalContent').scrollTop(...'#BoxModalContent') ---- 事件绑定与解绑 使用.on() bind 事件,使用.unBind() 取消 bind 事件 注意事件不会被覆盖,因此如果希望加载另一个同名事件则需要先取消加载然后重新...规定预计的服务器响应的数据类型。默认地,jQuery 将智能判断。

    9.7K30

    JQuery最全常用方法指南

    , 当鼠标移动到一个匹配的元素上面时,会触发指定的第一个函数。...(array, callback) 使用某个方法修改一个数组中的项,然后返回一个新的数组 jQuery.inArray(value, array) 返回value在数组中的位置,如果没有找到,则返回...由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出。....innerHTML; 3、如何获取jQuery集合的某一项 对于获取的元素集合,获取其中的某一项(通过索引指定)可以使用eq或get(n)方法或者索引号获取,要注意,eq返回的是jquery对象,而...可以有多个参数(合并多项并返回) $.map(array, fn):数组映射。把一个数组中的项目(处理转换后)保存到到另一个新数组中,并返回生成的新数组。

    11K31

    LeetCode笔记:283. Move Zeroes

    大意: 给出一个数字数组,写一个函数来移动其中的所有“0”到末尾,并保持其他非零元素的相对顺序不变。...思路1: 首先想到了一个比较笨的方法,就是循环从头开始遍历数组中的每个数,遇到“0”,就将后面的所有数的位置往前移动一个,然后把最后一个数置为“0”,当进行完这样一次操作后,还要检测一下移动到前面来的下一位数是不是为...23ms,减少了2ms,有一点效果,再观察一下,其实后面那个检查后面的数是否都为0的操作,明明可以放在那个移动数字的循环中去做,在移动数字时,同样也要对后面的所有数字进行操作,所以可以在同一个循环中进行...还是从数组的第一个数开始循环,当发现“0”以后,立马在它后面找到第一个不为“0”的数字,然后交换这两个数字的位置,其余的数字都不用动,这样应该简单一些。...他的思路是:设置一个从0开始的标记,然后遍历每个数字,当数字不为“0”时,将nums数组的序号为标记的位置的数改成这个数,然后把标记加一,注意它的“++”是后置的,只有当检测到不为0的数字时,才会增加标记值

    40720

    前端无法让我冷静

    调用一个对象的一个方法,以另一个对象替换当前对象 apply方法:apply(obj,[x,y,z]) 应用某一对象的一个方法,用另一个对象替换当前对象。...pop()用于移除数组末尾的最后一项,然后返回移除的项 unshift:将参数添加到原数组开头,并返回数组的长度 shift():删除原数组第一项,并返回删除元素的值 HTTP协议的理解、TCP/IP三次握手...: img { float:left; clear:both; } 对闭包的理解 如何判断一个变量是否是数组 1、instanceof function isArray (obj)...v-html、v-show、v-if、v-for等等 v-if 和 v-show 有什么区别? Vue中如何监控某个属性值的变化?...('box'); var $box = $(box); jQuery对象转原生DOM对象: var $box = $('#box'); var box = $box[0]; jQuery如何扩展自定义方法

    2.5K40

    【Leetcode】“滑” 出新天地:滑动窗口法的思路转换与问题破解

    将 x 减到 0 的最小操作数 - 力扣(LeetCode) 具体的题目描述如下所示: 给你一个整数数组 nums 和一个整数 x 。...这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。 你想要尽可能多地收集水果。...你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果 。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘。...,需要设置一个额外的变量,最后循环完成后,返回即可; 2.数组 其实这种方式就是模仿hash表,通过数组下标来表示这里的数字类型,具体的代码如下所示: class Solution { public...代码复杂度 这两种方式的时间复杂度都是O(n),但是都是开辟了另一个空间; 一类时哈希表,HashMap所占用的空间就是和存储的键值对数量相关,其空间复杂度为O(N)量级。

    9610

    精读《DOM diff 原理详解》

    不存在的位置补 0,我们拿到 e:4 d:3 c:2 h:0 这样一个数组,下标 0 是新增,非 0 就是移过来的,批量转化为插入操作即可。...a c e 这三个字母在 Old 原始顺序 a b c d e 中是相对有序的,我们只要把 b d 移走,这三个字母的位置自然就正确了。因此我们只需要找到 New 数组中的 最长连续子串。...具体的找法可以当作一个小算法题了,由于知道每个元素的实际下标,比如这个例子中,下标是这样的: [b:1, d:3, a:0, c:2, e:4] 肉眼看上去,连续自增的子串有 b d 和 a c e,由于...React 采用了 仅右移策略,即对元素发生的位置变化,只会将其移动到右边,那么右边移完了,其他位置也就有序了。...所以这是一个有利有弊的算法。新增和删除比较简单,和 Vue 差不多。 PS:最新版 React Dom diff 算法如有更新,欢迎在评论区指出,因为这种算法看来不如 Vue 的高效。

    43220

    Jquery 使用技巧总结

    由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出。...(0).innerHTML; 3、如何获取jQuery集合的某一项 对于获取的元素集合,获取其中的某一项(通过索引指定)可以使用eq或get(n)方法或者索引号获取,要注意,eq返回的是jquery...p元素单击事件分别设定不同的处理 jQuery中几个自定义的事件: (1)hover(fn1,fn2):一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法。...当鼠标移动到一个匹配的元素上面时,会触发指定的第一个函数。当鼠标移出这个元素时,会触发指定的第二个函数。 //当鼠标放在表格的某行上时将class置为over,离开时置为out。...可以有多个参数(合并多项并返回) $.map(array, fn):数组映射。把一个数组中的项目(处理转换后)保存到到另一个新数组中,并返回生成的新数组。

    2.9K20

    70个NumPy练习:在Python下一举搞定机器学习矩阵运算

    输入: 输出: 答案: 12.从一个数组中删除存在于另一个数组中的元素? 难度:2 问题:从数组a中删除在数组b中存在的所有元素。 输入: 输出: 答案: 13.获取两个数组元素匹配的索引号。...输入: 答案: 22.如何使用科学记数法(如1e10)漂亮地打印一个numpy数组?...答案: 49.如何计算数组中所有可能值的行数? 难度:4 问题:计算有唯一值的行数。 输入: 输出: 输出包含10列,表示1到10之间的数字。这些值是相应行中数字数量。...输出: 答案: 65.如何找到数组中第n个重复项的索引 难度:2 问题:找出x中第1个重复5次的索引。...难度:2 问题:创建一个长度为10的numpy数组,从5开始,在连续数字之间有一个3的步长。 答案: 69.如何填写不规则的numpy日期系列中的缺失日期? 难度:3 问题:给定一个不连续的日期数组。

    20.7K42

    Numpy 简介

    换句话说,为了高效地使用当今科学/数学基于Python的工具(大部分的科学计算工具),你只知道如何使用Python的原生数组类型是不够的 - 还需要知道如何使用NumPy数组。...关于数组大小和速度的要点在科学计算中尤为重要。举一个简单的例子,考虑将1维数组中的每个元素与相同长度的另一个序列中的相应元素相乘的情况。...所有的ndarray都是同质的:每个条目占用相同大小的内存块,并且所有块都以完全相同的方式进行解释。如何解释数组中的每个项是由一个单独的数据类型对象指定的,其中一个对象与每个数组相关联。...例如,3D空间中的点的坐标 [1, 2, 1] 是rank为1的数组,因为它具有一个轴。该轴的长度为3。在下面的示例中,该数组有2个轴。 第一个轴(维度)的长度为2,第二个轴(维度)的长度为3。...Out[7]: array([ 0, 1, 4, 9, 16]) 基本操作 copyto(dst, src[, casting, where]) 将值从一个数组复制到另一个数组

    4.7K20
    领券