---- 摘自传智播客公开课 ---- package test; import java.util.Scanner; public class Arithmetic3 { //题设 break; case 2: System.out.println("青年"); break; case 3:
文章和资源同步更新至微信公众号:算法工程师之路 Day 3,继续加油,数据结构知识点! 1 编程题 【剑指Offer】用堆栈实现队列 用两个栈来实现一个队列,完成队列的Push和Pop操作。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 else{ left++; } } return rotateArray[left]; } }; 2 概念题 3 资源分享 欢迎关注我的个人公众号 (算法工程师之路),回复"左神算法基础CPP"即可获得大量算法源码,并实时更新! 希望大家多多支持哦~ 公众号简介:分享算法工程师必备技能,谈谈那些有深度有意思的算法,主要范围:C++数据结构与算法/深度学习(CV),立志成为Offer收割机!
一:仅仅反转字母 思路一: 1:第一次遍历s把非字母扔进数组中 2:第二次遍历s,把字母进栈 3:出栈填充数组 麻烦!~! 买卖股票的最佳时机 最大差值_牛客题霸_牛客网 class Solution { public int maxProfit(int[] prices) { int profit 找到所有数组中消失的数字 心得: 这题确实不难,用一个Hash表,遍历nums,把拿到的数字作为下标,然后给Hash表这个下标的值++,就行,最后遍历Hash表,找值为0的下标添加到集合当中 1:注意遍历 边的数目 这样我们就把求直径转化为了求左右边的数目之和 明显 3,4,5,边的数目为0 ,2的边的数目= 1 , 1的边的数目 = 左(边的数目=2)+ 右(边的数目=1)= 3 所以二叉树直径为 3 但是这道题有可能不经过根节点,此时根2,左右两边加起来的边数才是最大的=4,所以我们搞一个全局变量。
/ const addByTwo = addByX(2); console.log(addByTwo(1)); // => should return 3 console.log(addByTwo(2) ); // => should return 4 console.log(addByTwo(3)); // => should return 5 const addByThree = addByX(3) console.log(myActions('undo')); // => should log 'nothing to undo' 挑战19 blackjack 问题: 仔细观察测试代码如果你需要帮忙来理解下面的算法描述 / / DEALER / const deal = blackjack([2, 6, 1, 7, 11, 4, 6, 3, 9, 8, 9, 3, 10, 4, 5, 3, 7, 4, 9, 6, 10 / PLAYER 3 / const i_ALSO_like_to_live_dangerously = deal(3, 7); console.log(i_ALSO_like_to_live_dangerously
2.解题思路 3.代码 class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { vector 2.解题思路 3.代码 class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { 2.解题思路 3.代码 //左闭右开,滑动窗口 class Solution { public: int minSubArrayLen(int target, vector<int>& nums } } if(ret == INT_MAX) return 0; return ret; } }; 4.运行结果 总结 今天是算法练习的第 3天。
随着TypeScript的流行,越来越多的开发者开始使用TypeScript来解决算法问题。在本文中,我们将使用TypeScript来解决剑指offer的算法题。 我们将使用TypeScript的强类型和面向对象的特性来解决这些问题,并通过实际的代码示例来演示如何使用TypeScript来解决算法问题。 3.2、题解使用深度优先搜索算法,val表示当前路径已经累计的和,list存储当前路径。 示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 25.2、题解使用Boyer-Moore 投票算法也叫摩尔投票法,维护一个候选众数 candidate 和它出现的次数 count 从三个数来看,3,30,15,首先可以看3和30,先排成30,3,15的模式,然后再继续往后看3,15,3和15可以排成3 + 15 => 315和 15 + 3 => 153,153更小,故可以排成15,3
我扫了一眼代码,心想这题挺经典的,来,我给你捋一捋。 ##算法题: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。 偷第1、3、5家,2+9+1=12 说白了就是:选一些数,这些数不能相邻,要让它们的和最大。 思路分析 暴力解法:枚举所有可能的偷窃方案,选金额最大的。每家可以选择偷或不偷,2^n种方案。 比如偷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, 5, 0, 0, 3, 1, 4})) // 4 } 注意事项 边界条件:数组长度小于2,无法买卖,直接返回0。 这题的关键点在于理解一次遍历的思路。我们要找最低的买入价和最高的卖出价,但不能简单找最小值和最大值,因为买入必须在卖出之前。所以要用一次遍历,维护历史最低价,同时计算每次卖出的利润。
今天和大家聊的问题叫做最长不重复子串,这道题很有意思,我们先来看题面: Given a string, find the length of the longest substring without 样例 Example 1: Input: "abcabcbb" Output: 3 Explanation: The answer is "abc", with the length of 3. Example 3: Input: "pwwkew" Output: 3 Explanation: The answer is "wke", with the length of 3. 到这里,基本上是我们通过平常思维能够想到的极致了,但是它远不是算法的极值。这道题还存在很大的优化空间,在我们继续探索之前,我们需要先来学习一个新的算法。 到这里,我们虽然已经将算法优化成了 ? ,但是并没有结束,这题还有优化的空间。 那么,怎么做进一步优化呢? 敏感的同学在观察上面这段代码的时候,可能会觉得中间的while循环有点别扭。
引言:当你作为一个初学Java算法题的小白,可以点进来看看我这些算法基础题,能够很好的帮助你打好算法基本功。打好基础,才能更上一层楼。速速开始学起这些算法题吧! all=sc.next(); System.out.println(String.format("%d %d %d",Integer.parseInt(all.substring(0,3) ), Integer.parseInt(all.substring(3,6)), Integer.parseInt(all.substring( 6,9)))); sc.close(); } } 2:%s格式符 输入字符串,然后输出前3个字符,要求占6列,右对齐。 3:%f格式符 输入一个实数,第一次按实型输出;第二次保留2位小数输出;第三次保留3位小数但最小列宽8列输出,空格分隔。
JavaScript算法题 提示:更新时间 2022年3月30日14:31:48 文章目录 JavaScript算法题 案例 1.九九乘法表 2.最大公约数 3.最小公倍数 4.求整数1~100的累加值 ,但要求跳过所有个位为3的数 5.数组去重,去除重复的数字 6.数组排列,从小到大 7.数组倒置,顺序置换 8.水仙花数,输出100-999的数 9.百钱百鸡,一百块钱买一百只鸡,公鸡5块钱一只,母鸡3 + Math.pow(b, 3) + Math.pow(c, 3) == i) { num++; console.log(i) ; } } console.log("一共有:" + num); 9.百钱百鸡,一百块钱买一百只鸡,公鸡5块钱一只,母鸡3块钱一只,小鸡1块钱3只 代码如下(示例): //百钱百鸡 公鸡5块 母鸡3块 小鸡 1块3只 一百块买一百只鸡 公鸡母鸡小鸡个多少只 <script> var num = 100;
小龙报:个人主页 作者简介:C++研发,嵌入式,机器人方向学习者 ❄️个人专栏:《算法通关指南》 ✨ 永远相信美好的事情即将发生 前言 本专栏聚焦算法题实战,系统讲解算法模块:以《c++编程 》,《数据结构和算法》《基础算法》《算法实战》 等几个板块以题带点,讲解思路与代码实现,帮助大家快速提升代码能力***ps:本章节题目分两部分,比较基础笔者只附上代码供大家参考,其他的笔者会附上自己的思考和讲解 ,希望和大家一起努力见证自己的算法成长*** 一、海港 1.1题目 链接:海港 1.2算法原理 先来的乘客,在时间逐渐增大的时候会先出列。 算法利用队列存储乘客编号和到达时间,并维护一个数组统计各国人数。当时间差超过24小时时,将相应乘客出队并更新国家种类数。代码简洁高效,适合处理实时统计需求。 文章强调持续学习算法的重要性,鼓励读者保持积极心态,相信努力终有回报。
序列的变化情况采样如下: 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 请问采用的是以下哪种排序算法
.size(); if (m == 1 && n == 1) { return 0; } k = min(k, m + n - 3)
面试发现自己的算法知识有不足,因此参考了多篇文章学习总结。 冒泡排序 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较 冒泡排序最好的时间复杂度为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。
前言 本文记录了我对打印算法题的总结。先说说什么事打印算法题,就是按照一定的规则打印二维矩阵。 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 【要求】 额外空间复杂度为 matrix,按照“之”字形的方式打印这个阵, 例如:1 2 3 4 5 6 7 89 10 11 12 “之”字形打印的结果为: 1,2,5,9,6,3,4,7,10,11, 8,12 【要求】
.size(); if (m == 1 && n == 1) { return 0; } k = min(k, m + n - 3)
#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; }
输出描述: 输出多行,表示输入数据处理后的结果 输入: 3 2 2 1 输出: 1 2 说明: 输入解释: 第一个数字是3,也即这个小样例的N=3,说明用计算机生成了3个1到500之间的随机整数,接下来每行一个随机数字 ,共3行,也即这3个随机数字为: 2 2 1 所以样例的输出为: 1 2 //TreeSet public static void main(String args[]){ Scanner 3 5 ) 数据范围: 1≤�≤2×109+14 1≤n≤2×109+14 输入描述: 输入一个整数 输出描述: 按照从小到大的顺序输出它的所有质数的因子,以空格隔开。 输入:180 输出:2 2 3 3 5 6.取近似值(n = (int)(number+0.5)) 描述 写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。 多个相同的字符只计算一次 例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。 数据范围: 1≤n≤500 1≤n≤500 输入描述: 输入一行没有空格的字符串。