本文来源于算法面试题特训专栏,这里有大量专业性的算法题比如(动态规划21天,大厂特训28天等等)
欢迎大家一起学习。
链接:传送门
在刚刚结束的 每日算法&面试题,大厂特训二十八天 和 冲刺大厂每日算法&面试题,动态规划21天 的训练中我们一起打卡走了过来。但是学习不能停呀相信许多小伙伴也从之前的练习中取得了不错的成绩,从今天开始我们开始Java集训(算法&&面试题)第一天接着卷起来。
特别介绍
小白练手专栏,适合刚入手的新人以及考python二级的同学欢迎订阅编程小白进阶
python有趣练手项目里面包括了像《机器人尬聊》《恶搞程序》这样的有趣文章,可以让你快乐学python练手项目专栏
另外想学JavaWeb进厂的同学可以看看这个专栏:传送们
这是个冲刺大厂面试专栏还有算法比赛练习我们一起加油 上岸之路
问题描述 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
输入格式
本试题没有输入。
输出格式
输出32行,按从小到大的顺序每行一个长度为5的01串。
样例输出
00000
00001
00010
00011
<以下部分省略>
public class Main{
public static void main(String[] args) {
for(int i=0;i<32;i++) {
System.out.printf("%05d\n", Integer.valueOf(Integer.toBinaryString(i)));
}
}
}
问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
输入格式
输入包含一个整数n。
输出格式
输出一行,包含一个整数,表示Fn除以10007的余数。
说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。
样例输入
10
样例输出
55
样例输入
22
样例输出
7704
这个题在以前的动态规划21天讲过,大家可以回去看看
import java.util.Scanner;
public class Main{
public static int F(int n) {
if(n==1||n==2)return 1;
int a=1,b=1,c=0;
for(int i=0;i<n-2;i++) {
c=(a+b)%10007;
b=a;
a=c;
}
return c;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
System.out.println(F(n)%10007);
}
}
说一下泛型原理,并举例说明。
泛型就是将类型变成参数传入,使得可以使用的类型多样化,从而实现解耦。Java 泛型是在
Java1.5 以后出现的,为保持对以前版本的兼容,使用了擦除的方法实现泛型。擦除是指在
一定程度无视类型参数 T,直接从 T 所在的类开始向上 T 的父类去擦除,如调用泛型方法,
传入类型参数 T 进入方法内部,若没在声明时做类似
publicTmethodName(TextendsFathert){},Java 就进行了向上类型的擦除,直接把参数 t
当做 Object 类来处理,而不是传进去的 T。 即在有泛型的任何类和方法内部,它都无法知
道自己的泛型参数,擦除和转型都是在边界上发生,即传进去的参在进入类或方法时被擦除掉,
但传出来的时候又被转成了我们设置的 T。在泛型类或方法内,任何涉及到具体类型(即擦除
后的类型的子类)操作都不能进行,如 newT(),或者 T.play()(play 为某子类的方法而不
是擦除后的类的方法)
谈谈你对 Java 中 String 的了解。
String 类是 final 型,固 String 类不能被继承,它的成员方法也都默认为 final 方法。
String 对象一旦创建就固定不变了,对 String 对象的任何改变都不影响到原对象,相关
的任何改变 操作都会生成新的 String 对象。
String 类是通过 char 数组来保存字符串的,String 对 equals 方法进行了重定,比较
的是 值相等。
String a="test";String b="test";String c=newString("test");
a、b 和字面上的 test 都是指向 JVM 字符串常量池中的"test"对象,他们指向同一个对象。
而 new 关键字一定会产生一个对象 test,该对象存储在堆中。所以 newString("test")产生
了两个对象,保存在栈中的 c 和保存在堆中的 test。而在 java 中根本就不存在两个完全一
模一样的字符串对象,故在堆中的 test 应该是引用字符串常量池中的 test。
例:
String str1="abc";//栈中开辟一块空间存放引用 str1,str1 指向池中 String 常量"abc" String str2="def";//栈中开辟一块空间存放引用 str2,str2 指向池中 String 常量"def" String str3=str1+str2;//栈中开辟一块空间存放引用 str3//str1+str2 通过 StringBuilder 的最后一步
toString()方法返回一个新的 String 对象"abcdef"
//会在堆中开辟一块空间存放此对象,引用 str3 指向堆中的(str1+str2)所返回的新 String 对象。
System.out.println(str3=="abcdef");//返回 false 因为 str3 指向堆中的"abcdef"对象,而
"abcdef"是字符池中的对象,所以结果为 false。JVM 对 Stringstr="abc"对象放在常量池是在编译
时做的 , 而 Stringstr3=str1+str2 是在运行时才知道的,new 对象也是在运行时才做的
这里有python,Java学习资料还有有有趣好玩的编程项目,更有难寻的各种资源。反正看看也不亏。