作者:TeddyZhang,公众号:算法工程师之路 Day 4,继续加油,Python知识点! 1 编程题 【剑指Offer】斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 { return ; } return process(number-1) + process(number-2); } }; 2 概念题 3 资源分享 欢迎关注我的个人公众号 (算法工程师之路),回复"左神算法基础CPP"即可获得大量算法源码,并实时更新! 希望大家多多支持哦~ 公众号简介:分享算法工程师必备技能,谈谈那些有深度有意思的算法,主要范围:C++数据结构与算法/深度学习(CV),立志成为Offer收割机!
(译注:原题库网页上的按钮) 题解: / CHALLENGE 4 / function brokenRecord() { // ADD CODE HERE setInterval(()=>console.log
{ hash[s[begin++]]--; } } return ret; } }; 4. num--; } ret = max(ret, end - begin); } return ret; } }; 4. if(len == -1) { return -1; } return nums.size() - len; } }; 4. 运行结果 总结 今天是算法练习的第4天, 冰冻三尺非一日之寒,继续加油。
在本文中,我们将使用TypeScript来解决剑指offer的算法题。这些问题涵盖了各种各样的主题,包括数组、字符串、链表、树、排序和搜索等。 我们将使用TypeScript的强类型和面向对象的特性来解决这些问题,并通过实际的代码示例来演示如何使用TypeScript来解决算法问题。 如7,5,6,4,归并排序首先将其转成[7],[5],[6],[4]这四个小数组,然后分析[7]和[5],7比5大,归并排序后为[5,7],7对于逆序的贡献为1,分析[6]和[4],6比4大,归并排序后为 [4,6],6对于逆序的贡献为1, 然后再分析[5,7]和[4,6],排序的过程如下:首先变为[4,],无贡献,然后变为[4,5],5对于逆序的贡献为2 - 0 = 2,然后变为[4,5,6],6对于逆序的贡献度为 return 1 + Math.max(maxDepth(root.left), maxDepth(root.right)); }; 第二种方法,层序遍历算总层数即可,关于层序遍历可以看:TypeScript算法题实战
50.Algorithm Gossip: 4N魔方阵 说明 与奇数魔术方阵 相同,在于求各行、各列与各对角线的和相等,而这次方阵的维度是4的倍数。 解法 先来看看4X4方阵的解法: ? 简单的说,就是一个从左上由1依序开始填,但遇对角线不填,另一个由左上由16开始填,但只填在对角线,再将两个合起来就是解答了;如果N大于2,则以 4X4为单位画对角线: ? 至于对角线的位置该如何判断,有两个公式,有兴趣的可以画图印证看看,如下所示: 左上至右下: j % 4 == i % 4 右上至左下:(j % 4 + i % 4) == 1 代码示例 #include for (j = 1; j <= N; j++) { for (i = 1; i <= N; i++) { if (j % 4 == i % 4 || (j % 4 + i % 4) == 1) square[i][j] = (N + 1 - i) * N - j + 1; else
我扫了一眼代码,心想这题挺经典的,来,我给你捋一捋。 ##算法题:Word Break 题目理解 题目说给你一个字符串 s 和一个单词列表 wordDict。 这题的关键点在于理解动态规划的状态转移。dp[i] 表示前 i 个字符能否拆分,如果某个位置 j 之前能拆分,而且 s[j:i] 是字典里的词,那 dp[i] 就能拆分。
我扫了一眼代码,心想这题挺经典的,来,我给你捋一捋。 ##算法题:House Robber 题目理解 题目说你是专业小偷,计划偷窃沿街的房屋。 举例说明: 输入 [1,2,3,1],输出 4。偷第1和第3家,1+3=4 输入 [2,7,9,3,1],输出 12。 return a } return b } func main() { // 测试用例 fmt.Println(rob([]int{1, 2, 3, 1})) // 4 比如偷1、3、5家,或者2、4、6家。这就是为什么状态转移要考虑i-2而不是i-1。 Go函数名:函数名叫rob,不是robHouse,面试时要注意函数名的规范。 这题的关键点在于理解动态规划的状态转移。每家有两种选择:偷或不偷。如果偷这一家,上一家就不能偷,所以是dp[i-2]+nums[i]。如果不偷这一家,就是dp[i-1]。取两者最大值就是最优解。
我扫了一眼代码,心想这题挺经典的,来,我给你捋一捋。 ##算法题:Best Time to Buy and Sell Stock 题目理解 题目说给你一个数组 prices,prices[i] 是第 i 天的股票价格。 设计算法计算你能获取的最大利润。 注意不能在买入前卖出,也就是买入日期必须在卖出日期之前。 举例说明: 输入 [7,1,5,3,6,4],输出 5。 , 3, 1, 4})) // 4 } 注意事项 边界条件:数组长度小于2,无法买卖,直接返回0。 这题的关键点在于理解一次遍历的思路。我们要找最低的买入价和最高的卖出价,但不能简单找最小值和最大值,因为买入必须在卖出之前。所以要用一次遍历,维护历史最低价,同时计算每次卖出的利润。
引言:当你作为一个初学Java算法题的小白,可以点进来看看我这些算法基础题,能够很好的帮助你打好算法基本功。打好基础,才能更上一层楼。速速开始学起这些算法题吧! System.out.println(String.format("%f",a)+" "+String.format("%.2f",a)+" "+String.format("%8.3f",a)); } } 4: System.in); int x=sc.nextInt(); System.out.println((int)(Math.pow(x,6)+3*Math.pow(x,4)
前言 本文记录了我对打印算法题的总结。先说说什么事打印算法题,就是按照一定的规则打印二维矩阵。 2 9 10 11 12 15 11 7 3 13 14 15 16 16 12 8 4 接下来,将会有几道打印算法题 例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ========= 13 9 5 1 14 10 6 2 15 11 7 3 16 12 8 4 例如:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印结果为:1,2,3,4,8,12,16,15,14,13,9, 5,6,7,11, 10 【要求】 额外空间复杂度为 例如在第一二道题,我们都是通过解决外矩阵后,再解决内矩阵的方式解决问题的。 2、设计一个子模块打印函数 例如给定左上角和右上角打印一个矩阵等打印函数,记住一些常用的打印函数,可以让我们更快地解决问题
序列的变化情况采样如下: 20,15,21,25,47,27,68,35,84 15,20,21,25,35,27,47,68,84 15,20,21,25,27,35,47,68,84 请问采用的是以下哪种排序算法 快速排序 对于 希尔排序 而言,需要知道 增量 ,根据动画我们可以理解为 gap = 4 。 先分为四组。
return - 1 return 0 print(Solution().compareVersion(version1 = "1", version2 = "1.1")) 九、验证IPV4 int _y, int _r): x(_x), y(_y), rest(_r) {} }; class Solution { private: static constexpr int dirs[4] Nagato cur = q.front(); q.pop(); for (int i = 0; i < 4;
面试发现自己的算法知识有不足,因此参考了多篇文章学习总结。 冒泡排序 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较 冒泡排序最好的时间复杂度为O(n),是一种稳定排序算法。 快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。 不指定算法的数组排序 let arr = [16, 31, 12, 1, 9, 12, 10]; arr.sort((a, b) => a - b); // 从小到大 4. 譬如[7, 8, 4, 9, 9, 15, 3, 1, 10]这个数组的计算值是 11 ( 15 - 4 ) 而不是 14 (15 - 1),因为 15 的下标小于 1。
return - 1 return 0 print(Solution().compareVersion(version1 = "1", version2 = "1.1")) 九、验证IPV4 int _y, int _r): x(_x), y(_y), rest(_r) {} }; class Solution { private: static constexpr int dirs[4] Nagato cur = q.front(); q.pop(); for (int i = 0; i < 4;
#include <stdio.h> #include <string.h> #define MAX 1000 struct Node{ int v,net; }; struct Node node[MAX]; int main(){ int n,e,t,i,x,y,z,head[MAX],que[MAX],map[MAX/2][MAX/2],qh,qt; while(scanf("%d %d",&n,&e)!=EOF){ memset(head,-1,sizeof(head)); for(i = 0;i < e;i++){ scanf("%d %d",&x,&y); node[i].v = y; node[i].net = head[x]; head[x] = i; } scanf("%d",&t); while(t--){ z = 0; memset(map,0,sizeof(map)); qh = qt = 1; scanf("%d %d",&x,&y); if(x == y){ printf("yes\n"); continue; } que[qt++] = x; while(qh < qt){ for(i = head[que[qh]];i != -1;i = node[i].net){ if(map[que[qh]][node[i].v] == 0){ map[que[qh]][node[i].v] = 1; que[qt++] = node[i].v; } if(node[i].v == y){ z = 1; break; } } if(z == 1) break; qh++; } if(z == 1) printf("yes\n"); else printf("no\n"); } printf("\n"); } return 0; }
treeSet.iterator(); while(ite.hasNext()){ System.out.println(ite.next()); } } } 4.
# LeetCode 算法题 简单 两数之和 回文数 罗马数字转整数 合并两个有序链表 每天一道,没坚持下去 # 简单 # 两数之和 题目地址 (opens new window) 给定一个整数数组 , l2 = [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 = [], l2 = [] 输出:[] 示例 3: 输入:l1 = [], l2 = [0] 输出:[0] 提示: 算法 我们直接将以上递归过程建模,同时需要考虑边界情况。 如果 l1 或者 l2 一开始就是空链表 ,那么没有任何操作需要合并,所以我们只需要返回非空链表。 方法二:迭代 思路 我们可以用迭代的方法来实现上述算法。 算法 首先,我们设定一个哨兵节点 prehead ,这可以在最后让我们比较容易地返回合并后的链表。我们维护一个 prev 指针,我们需要做的是调整它的 next 指针。
---- 摘自传智播客公开课 ---- package test; import java.util.Scanner; public class Arithmetic3 { //题设 break; case 3: System.out.println("青壮年"); break; case 4:
算法题目 题目:打印出所有的 “水仙花数 “,所谓 “水仙花数 “是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 “水仙花数 “,因为153=1的三次方+5的三次方+3的三次方。 算法分析 根据题目分析,水仙花是三位数是 个位+十位+百位 自身次方等于该数本身,那么计算一个数是否是水仙花数要将这个数的 个位数 十位数 百位数给分解出来伪代码如下: a = i/100; 10; //获取3位数中十位的数 c=i%100%10; //获取3位数中个位的数 这样就可以通过循环来过滤出一个区间的水仙花数量了 算法
# 四、2 ^ (n+1)=O(2 ^ n)成立吗? 2^(2n)=O(2 ^ n)成立吗? 文心一言: chatgpt: 第一个式子不成立,第二个式子成立。 1. 2 ^ (n+1) = O(2 ^