寒假刷题
古城客栈
争取早日成为Java技术大佬
展开
-
算法题-日期类总结
算法题1:回文日期在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。牛牛习惯用 8 位数字表示一个日期,其中,前 4 位代表年份,接下来 2 位代表月份,最后 2 位代表日期。显然:一个日期只有一种表示方法,而两个不同的日期的表示方法不会相同。牛牛认为,一个日期是回文的,当且仅当表示这个日期的 8 位数字是回文的。现在,牛牛想知道:在他指定的两个日期之间(包含这两个日期本身),有多少个真实存在的日期是回文的。一个 8 位数字是回文的,当且仅当对于所有的 i(1≤i≤8) 从左向原创 2021-04-11 17:00:15 · 546 阅读 · 0 评论 -
【Java基础】StreamTokenizer使用详解
【Java基础】StreamTokenizer使用详解 小七mod 2020-04-17 20:43:12 ...转载 2021-04-05 21:18:45 · 951 阅读 · 2 评论 -
单调栈
什么是单调栈?从名字上就听的出来,单调栈中存放的数据应该是有序的,所以单调栈也分为单调递增栈和单调递减栈单调递增栈:单调递增栈就是从栈底到栈顶数据是从大到小单调递减栈:单调递减栈就是从栈底到栈顶数据是从小到大单调栈的伪代码stack<int> st;//此处一般需要给数组最后添加结束标志符,具体下面例题会有详细讲解for (遍历这个数组){ if (栈空 || 栈顶元素大于等于当前比较元素) { 入栈; } else { while (栈不为空 &&转载 2021-04-04 21:14:19 · 179 阅读 · 0 评论 -
二分与前缀和
知识点讲解:实数二分,必然是一个确定的值。整数二分有一个向下取整的问题。边界条件:设置一个长度,当R-L>1e-6 循环进行,否则退出二分经典代码:例题1:数的范围给定一个按照升序排列的长度为 n 的整数数组,以及 q 个查询。对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 0 开始计数)。如果数组中不存在该元素,则返回 -1 -1。输入格式:第一行包含整数 n 和 q,表示数组长度和询问个数。第二行包含 n 个整数(均在 1∼10000 范围内),表示完整数组。原创 2021-04-01 12:00:38 · 220 阅读 · 0 评论 -
蓝桥杯-跑步锻炼
public class Main { public static void main(String[] args) { int []month={0,31,28,31,30,31,30,31,31,30,31,30,31}; int y=2000,m=1,d=1,w=6,res=0; while (true){ if(w==1||d==1)//周一或者月初 res+=2; ..原创 2021-03-26 18:40:07 · 712 阅读 · 1 评论 -
逆波兰表达式求值
根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入:tokens = ["2","1","+","3","*"]输出:9解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例 3:输入:tokens = ["10","6","9","3","+","-11原创 2021-03-26 16:50:04 · 92 阅读 · 0 评论 -
表达式求值
给定一个表达式,其中运算符仅包含 +,-,*,/(加 减 乘 整除),可能包含括号,请你求出表达式的最终值。输入格式共一行,为给定表达式。输出格式共一行,为表达式的结果。数据范围表达式的长度不超过 10^5。输入样例:(2+2)*(1+1)输出样例:8解题思路:采用栈import java.util.*;public class Main { private static Stack<Integer> num=new Stack<>()原创 2021-03-26 11:24:54 · 205 阅读 · 0 评论 -
Java-优先队列详解
一、优先队列的实现优先队列的实现中,我们可以选择堆数据结构,最大优先队列可以选用大堆,最小优先队列可以选用小堆来实现,堆就是如下图的二叉树。下面以最小优先队列来讲解其原理。最小优先队列一般包括将一个元素插入到集合S中、返回集合S中具有最小key的元素、返回并删除集合S中具有最小key的元素等。插入操作插入操作是将一个元素插入到集合S中,首先把该元素放入所有元素的下一位置,然后执行“上浮”操作,如下图示例(注意,下图示例是小堆,图片来自深入理解Java PriorityQueue)移除操作优先队列原创 2021-03-25 09:31:13 · 1224 阅读 · 0 评论 -
位1的个数
编写一个函数,输入是一个无符号整数(,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。示例 1:输入:3二进制格式:00000000000000000000000000001011输出3代码设计:public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { //题目描述问题 还是整数输入的原创 2021-03-24 16:00:09 · 126 阅读 · 0 评论 -
递归总结
从 1∼n1∼n输入样例:3输出样例:322 311 31 21 2 3原创 2021-03-19 11:24:44 · 115 阅读 · 0 评论 -
丑数
题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。示例1输入7返回值8代码设计:import java.lang.Math.*;//导包public class Solution { public int GetUglyNumber_Solution(int index) { if(index<=0)return 0;原创 2021-03-16 21:16:46 · 48 阅读 · 0 评论 -
数组中的逆序对
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字示例1输入[1,2,3,4,5,6,7,0]返回值7解题思路:1.归并排序 时间复杂度为O(nlogn)2.暴力破解 时间复杂度为O(n*n)因为数据的规模比较大 平方的话 时间复杂度会超出代码设计:public clas原创 2021-03-16 20:49:22 · 74 阅读 · 0 评论 -
翻转单词顺序列
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?示例1输入"nowcoder. a am I"返回值"I am a nowcoder."代码设计:public clas原创 2021-03-14 17:13:55 · 52 阅读 · 0 评论 -
全排列问题
全排列是什么问题?直接举例说明 1,2,3的全排列有 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 共6种,这是一个简单的排列组合问题,算法思路: dfs+回溯 这样的问题很容易想到递归,定义perm(R)是集合R的全排列,ri是R集合中第i个元素,Ri...转载 2021-03-14 12:23:26 · 244 阅读 · 0 评论 -
把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。示例1输入[3,32,321]返回值"321323"方法1:import java.util.ArrayList;public class Solution { public String PrintMinNumber(int [] numbers) { //自定义一个函数原创 2021-03-14 10:46:53 · 78 阅读 · 0 评论 -
孩子们的游戏(圆圈中最后剩下的数)
题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!_)。请你试着想下,哪个小朋友会得原创 2021-03-11 19:44:05 · 53 阅读 · 0 评论 -
扑克牌顺子
题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。 现原创 2021-03-10 17:04:36 · 57 阅读 · 0 评论 -
矩阵中的路径
题目描述示例1输入"ABCESFCSADEE",3,4,"ABCCED"返回值true解题思路:采用dfs遇见了几大难点:1.dfs找到了 如何退出状态2.Java传递对象时 就是引用传递代码设计import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param matrix string字符串原创 2021-03-05 12:02:05 · 55 阅读 · 0 评论 -
字符流中第一个不重复的字符
题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。返回值描述:如果当前字符流没有存在出现一次的字符,返回#字符。解题思路1:采用LinkerHashMap代码设计:import java.util.*;public class Solution { //Insert one char from stringstrea原创 2021-03-04 10:30:32 · 62 阅读 · 1 评论 -
对称的二叉树
题目描述请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。示例1输入{8,6,6,5,7,7,5}返回值true代码/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val;原创 2021-03-03 14:36:36 · 67 阅读 · 0 评论 -
替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。示例1输入"We Are Happy"返回值"We%20Are%20Happy"解决思路:方案1:import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * *原创 2021-03-02 20:47:42 · 61 阅读 · 0 评论 -
数组中只出现一次的数字
题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。示例1输入[1,4,1,6]返回值[4,6]说明返回的结果中较小的数排在前面 解题思路:用哈希表知识import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array int整型一维原创 2021-03-01 22:04:40 · 78 阅读 · 1 评论 -
包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。代码设计:import java.util.Stack;public class Solution { private Stack<Integer> normal=new Stack(); private Stack<Integer> temp=new Stack();//实例化 public void push(int node) {原创 2021-02-23 11:17:20 · 50 阅读 · 1 评论 -
二分问题
730. 机器人跳跃问题机器人正在玩一个古老的基于DOS的游戏。游戏中有N+1座建筑——从0到N编号,从左到右排列。编号为0的建筑高度为0个单位,编号为 i 的建筑高度为H(i)个单位。起初,机器人在编号为0的建筑处。每一步,它跳到下一个(右边)建筑。假设机器人在第k个建筑,且它现在的能量值是E,下一步它将跳到第k+1个建筑。如果H(k+1)>E,那么机器人就失去H(k+1)-E的能量值,否则它将得到E-H(k+1)的能量值。游戏目标是到达第N个建筑,在这个过程中能量值不能为负数个单位原创 2021-02-22 11:10:22 · 126 阅读 · 0 评论 -
和为S的连续正数序列
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!返回值描述:输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序输入9返回值[[2,3,4],[4,5原创 2021-02-15 16:26:23 · 55 阅读 · 0 评论 -
80. 骰子的点数
将一个骰子投掷n次,获得的总点数为s,s的可能范围为n~6n。掷出某一点数,可能有多种掷法,例如投掷2次,掷出3点,共有[1,2],[2,1]两种掷法。请求出投掷n次,掷出n~6n点分别有多少种掷法。样例1输入:n=1输出:[1, 1, 1, 1, 1, 1]解释:投掷1次,可能出现的点数为1-6,共计6种。每种点数都只有1种掷法。所以输出[1, 1, 1, 1, 1, 1]。样例2输入:n=2输出:[1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1]解释:投掷2原创 2021-01-31 13:20:09 · 410 阅读 · 0 评论 -
面试题5:替换空格
#include <iostream>#include <cstring>using namespace std;int main(){ char str[100]="We are happy";//长度可以不断的扩展 不用用string int l=strlen(str);//求字符串长度 int cnt=0; for(int i=0;i<l;i++){ if(str[i]==' ') cnt原创 2021-01-18 21:56:39 · 59 阅读 · 0 评论 -
数组中重复的数字
//数组中重复的数字 //解法1:可以记录每个数字出现的次数 次数超过1 输出 //解法2:用一个临时变量 记录上次出现的3 如2 3 3 3 4 只输出3 #include <iostream>#include <algorithm>using namespace std;const int n=110;int number[n];int m;//输入数组长度 int main(){ cin>>m; for(int i=0;i<m;i++)原创 2021-01-17 20:55:18 · 60 阅读 · 0 评论 -
2021寒假刷题第一题
104. 货仓选址在一条数轴上有 N 家商店,它们的坐标分别为 A1~AN。现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。输入格式第一行输入整数N。第二行N个整数A1~AN。输出格式输出一个整数,表示距离之和的最小值。数据范围1≤N≤100000,0≤Ai≤40000输入样例:46 2 9 1输出样例:12C++代码/***解决思路:采用贪心算法(排序)道理就是绝原创 2021-01-10 20:57:53 · 447 阅读 · 0 评论