- 福哥答案2020-01-07:1.7 数组+链表重要字段://HashMap的主干数组,可以看到就是一个Entry数组,初始值为空数组{},主干数组的长度一定是2的次幂,至于为什么这么做,后面会有详细分析。transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE;//实际存储的key-value键值对的个数transient int ... 福哥答案2020-01-07:1.7 数组+链表重要字段://HashMap的主干数组,可以看到就是一个Entry数组,初始值为空数组{},主干数组的长度一定是2的次幂,至于为什么这么做,后面会有详细分析。transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE;//实际存储的key-value键值对的个数transient int ...
- 第三步骤:找出初始值。学过数学归纳法的都知道,虽然我们知道了数组元素之间的关系式,例如dp[n] = dp[n-1] + dp[n-2],我们可以通过 dp[n-1] 和 dp[n-2] 来计算 dp[n],但是,我们得知道初始值例如⼀直推下去的话,会由 dp[3] = dp[2] + dp[1]。而 dp[2] 和 dp[1] 是不能再分解的了所以我们必须要能够直接获得 dp[2] 和 d... 第三步骤:找出初始值。学过数学归纳法的都知道,虽然我们知道了数组元素之间的关系式,例如dp[n] = dp[n-1] + dp[n-2],我们可以通过 dp[n-1] 和 dp[n-2] 来计算 dp[n],但是,我们得知道初始值例如⼀直推下去的话,会由 dp[3] = dp[2] + dp[1]。而 dp[2] 和 dp[1] 是不能再分解的了所以我们必须要能够直接获得 dp[2] 和 d...
- 动态规划,无非就是利用历史记录,来避免我们的重复计算。而这些历史记录,我们得需要一些变量来保存,一般是用⼀维数组或者⼆维数组来保存。第⼀步骤:定义数组元素的含义,上面说了了,我们会⽤用一个数组,来保存历史数组,假设用一维数组dp[] 吧。这个时候有非常重要的点,就是规定你这个数组元素的含义,例例如你的 dp[i] 是代表什么意思 动态规划,无非就是利用历史记录,来避免我们的重复计算。而这些历史记录,我们得需要一些变量来保存,一般是用⼀维数组或者⼆维数组来保存。第⼀步骤:定义数组元素的含义,上面说了了,我们会⽤用一个数组,来保存历史数组,假设用一维数组dp[] 吧。这个时候有非常重要的点,就是规定你这个数组元素的含义,例例如你的 dp[i] 是代表什么意思
- 考虑有没有重复计算// 我们实现假定 arr 数组已经初始化好的了了。int f(int n){if(n <= 2){return n;}//先判断有没计算过if(arr[n] != -1){//计算过,直接返回return arr[n];}else{// 没有计算过,递归计算,并且把结果保存到 arr数组⾥里里arr[n] = f(n-1) + f(n-1);reutrn arr[n];}... 考虑有没有重复计算// 我们实现假定 arr 数组已经初始化好的了了。int f(int n){if(n <= 2){return n;}//先判断有没计算过if(arr[n] != -1){//计算过,直接返回return arr[n];}else{// 没有计算过,递归计算,并且把结果保存到 arr数组⾥里里arr[n] = f(n-1) + f(n-1);reutrn arr[n];}...
- 福哥答案2020-11-15:此题来源于leetcode240和剑指 Offer(第 2 版)面试题4。1.线性查找。从二维数组的坐下角开始查找。如果当前元素等于目标值,则返回 true。如果当前元素大于目标值,则上移。如果当前元素小于目标值,则右移。2.线性查找+二分查找。当前元素上移和右移,采用二分法。要用到如下两道题:2.1.在一个有序数组中,找<=某个数最右侧的位置。2.2.在一个有... 福哥答案2020-11-15:此题来源于leetcode240和剑指 Offer(第 2 版)面试题4。1.线性查找。从二维数组的坐下角开始查找。如果当前元素等于目标值,则返回 true。如果当前元素大于目标值,则上移。如果当前元素小于目标值,则右移。2.线性查找+二分查找。当前元素上移和右移,采用二分法。要用到如下两道题:2.1.在一个有序数组中,找<=某个数最右侧的位置。2.2.在一个有...
- 福哥答案2020-11-13:二分法。有时候数组无序,同样可以采用二分法。这道题考察的是全局观,左边下降趋势,右边上升趋势,函数图像呈凹形,必有极小值。中左值和中值呈上升趋势,中值右边可以直接舍弃;中值和中右值呈下降趋势,中值左边可以直接舍弃。golang代码如下:package class01import ( "fmt" "testing")//局部最小值问题/*求其中一个极小... 福哥答案2020-11-13:二分法。有时候数组无序,同样可以采用二分法。这道题考察的是全局观,左边下降趋势,右边上升趋势,函数图像呈凹形,必有极小值。中左值和中值呈上升趋势,中值右边可以直接舍弃;中值和中右值呈下降趋势,中值左边可以直接舍弃。golang代码如下:package class01import ( "fmt" "testing")//局部最小值问题/*求其中一个极小...
- 福哥答案2020-11-04:福哥口诀法:收马李色坤(Collection、Map、List、Set、Queue)。李矢数链写(List:Vector矢量、ArrayList数组、LinkedList链表、CopyOnWriteList写时复制容器)。哈排枚写并(Set:HashSet哈希集、SortedSet有序集、EnumSet枚举集、CopyOnWriteArraySet写时复制数组集... 福哥答案2020-11-04:福哥口诀法:收马李色坤(Collection、Map、List、Set、Queue)。李矢数链写(List:Vector矢量、ArrayList数组、LinkedList链表、CopyOnWriteList写时复制容器)。哈排枚写并(Set:HashSet哈希集、SortedSet有序集、EnumSet枚举集、CopyOnWriteArraySet写时复制数组集...
- 福哥答案2020-11-03:1.输入链表头节点,奇数长度返回中点,偶数长度返回上中点 。1.1.快慢指针。1.2.单指针。1.3.数组。2.输入链表头节点,奇数长度返回中点,偶数长度返回下中点 。这道题是leetcode上的第876道题,叫【链表的中间节点】。2.1.快慢指针。2.2.单指针。2.3.数组。golang代码如下:package mainimport "fmt"func ma... 福哥答案2020-11-03:1.输入链表头节点,奇数长度返回中点,偶数长度返回上中点 。1.1.快慢指针。1.2.单指针。1.3.数组。2.输入链表头节点,奇数长度返回中点,偶数长度返回下中点 。这道题是leetcode上的第876道题,叫【链表的中间节点】。2.1.快慢指针。2.2.单指针。2.3.数组。golang代码如下:package mainimport "fmt"func ma...
- Ajax神操作六部曲 Ajax神操作六部曲
- 福哥答案2020-09-12:#福大大架构师每日一题#最大公约数1.【更相减损法】=【等值算法】,避免了取模运算,但是算法性能不稳定,最坏时间复杂度为O(max(a, b)))。2.【辗转相除法】,迭代和递归,时间复杂度不太好计算,可以近似为O(log(max(a, b))),但是取模运算性能较差。3.【Stein算法】,不但避免了取模运算,而且算法性能稳定,时间复杂度为O(log(max(... 福哥答案2020-09-12:#福大大架构师每日一题#最大公约数1.【更相减损法】=【等值算法】,避免了取模运算,但是算法性能不稳定,最坏时间复杂度为O(max(a, b)))。2.【辗转相除法】,迭代和递归,时间复杂度不太好计算,可以近似为O(log(max(a, b))),但是取模运算性能较差。3.【Stein算法】,不但避免了取模运算,而且算法性能稳定,时间复杂度为O(log(max(...
- 2020-07-31:给定一个二叉搜索树(BST),找到树中第K 小的节点。福哥答案2020-07-31:BST 的中序遍历是升序序列。1.递归法。时间复杂度:O(N),遍历了整个树。空间复杂度:O(N),用了一个数组存储中序序列。2.迭代法。时间复杂度:O(H+k),其中 H 指的是树的高度,由于我们开始遍历之前,要先向下达到叶,当树是一个平衡树时:复杂度为 O(logN+k)。当树是一个... 2020-07-31:给定一个二叉搜索树(BST),找到树中第K 小的节点。福哥答案2020-07-31:BST 的中序遍历是升序序列。1.递归法。时间复杂度:O(N),遍历了整个树。空间复杂度:O(N),用了一个数组存储中序序列。2.迭代法。时间复杂度:O(H+k),其中 H 指的是树的高度,由于我们开始遍历之前,要先向下达到叶,当树是一个平衡树时:复杂度为 O(logN+k)。当树是一个...
- 福哥答案2020-07-25:1.链表反转。反转,输出,反转。2.递归。3.数组。遍历存数组,然后反向遍历数组。4.栈。遍历存栈,然后pop栈输出。golang代码采用第2种方法。代码如下:package test27_reverseprint import ( "fmt" "testing") //Definition for singly-linked list.type L... 福哥答案2020-07-25:1.链表反转。反转,输出,反转。2.递归。3.数组。遍历存数组,然后反向遍历数组。4.栈。遍历存栈,然后pop栈输出。golang代码采用第2种方法。代码如下:package test27_reverseprint import ( "fmt" "testing") //Definition for singly-linked list.type L...
- 福哥答案2020-07-18:假设数组是[3,5,3,5],目标值是8。答案是否可重复,题里没说,所以分3种情况。如下:1.重复。答案是【0,1】【0,3】【1,2】【2,3】,序号组合,共4种组合。解法如下:1.1.嵌套遍历。时间复杂度:O(n^2)。1.2.哈希法。键存数组元素值,值存出现次数。时间复杂度:O(n)。1.3.排序+双指针夹逼。时间复杂度:O(nlogn)。2.半重复。答案... 福哥答案2020-07-18:假设数组是[3,5,3,5],目标值是8。答案是否可重复,题里没说,所以分3种情况。如下:1.重复。答案是【0,1】【0,3】【1,2】【2,3】,序号组合,共4种组合。解法如下:1.1.嵌套遍历。时间复杂度:O(n^2)。1.2.哈希法。键存数组元素值,值存出现次数。时间复杂度:O(n)。1.3.排序+双指针夹逼。时间复杂度:O(nlogn)。2.半重复。答案...
- 福哥答案2020-07-03:1.双重遍历。时间复杂度是O(N^2)。2.排序。采用外部排序。时间复杂度是O(NlogN)。3.遍历加哈希存储。空间换时间,时间复杂度是O(N),空间复杂度是O(N)。这种方法适用于小数据量,在这里用明显不合适。4.布隆过滤器。根据公式计算,万分之一的失误率需要228M内存。个人感觉这种方法不太合适。5.压缩位图。根据我目前的分析,压缩位图适合稀疏存储,在这里... 福哥答案2020-07-03:1.双重遍历。时间复杂度是O(N^2)。2.排序。采用外部排序。时间复杂度是O(NlogN)。3.遍历加哈希存储。空间换时间,时间复杂度是O(N),空间复杂度是O(N)。这种方法适用于小数据量,在这里用明显不合适。4.布隆过滤器。根据公式计算,万分之一的失误率需要228M内存。个人感觉这种方法不太合适。5.压缩位图。根据我目前的分析,压缩位图适合稀疏存储,在这里...
- 福哥答案2020-06-16:时间复杂度是O(N)。时间复杂度:O(N) where N is the size of the hash. 福哥答案2020-06-16:时间复杂度是O(N)。时间复杂度:O(N) where N is the size of the hash.
上滑加载中
推荐直播
-
HDC深度解读系列 - Serverless与MCP融合创新,构建AI应用全新智能中枢2025/08/20 周三 16:30-18:00
张昆鹏 HCDG北京核心组代表
HDC2025期间,华为云展示了Serverless与MCP融合创新的解决方案,本期访谈直播,由华为云开发者专家(HCDE)兼华为云开发者社区组织HCDG北京核心组代表张鹏先生主持,华为云PaaS服务产品部 Serverless总监Ewen为大家深度解读华为云Serverless与MCP如何融合构建AI应用全新智能中枢
回顾中 -
关于RISC-V生态发展的思考2025/09/02 周二 17:00-18:00
中国科学院计算技术研究所副所长包云岗教授
中科院包云岗老师将在本次直播中,探讨处理器生态的关键要素及其联系,分享过去几年推动RISC-V生态建设实践过程中的经验与教训。
回顾中 -
一键搞定华为云万级资源,3步轻松管理企业成本2025/09/09 周二 15:00-16:00
阿言 华为云交易产品经理
本直播重点介绍如何一键续费万级资源,3步轻松管理成本,帮助提升日常管理效率!
回顾中
热门标签