输入:
输入一个整形数组int[] values,表示整个序列的所有值。values 含有2到50个元素(其中包括2和50)
输出:
返回最长的等差数列的长度
举例:
values:{3,8,4,5,6,2,2},从这些数字中选取一些数字所组成的最长等差数列是2,3,4,5,6,所以返回5
答案:
public static int longest(int[] values){
if (values==null){
return 0;
}
Arrays.sort(values);
int maxlen=values[values.length-1]-values[0];
int ans=1;
if (maxlen==0){
return values.length;
}
int[][] dp=new int[values.length][maxlen+1];
for (int i = 0; i <dp.length ; i++) {
for (int j = 0; j < maxlen+1; j++) {
dp[i][j]=1;
}
}
for (int i = 1; i <values.length ; i++) {
for (int j = i-1; j >=0; j--) {
int diff=values[i]-values[j];//算出i和j之间的等差
dp[i][diff]=dp[j][diff]+1;//当前
ans=Math.max(ans,dp[i][diff]);
}
}
return ans;
}
2.如果一个正整数不能被大于1的完全平方数所整除,那么我们就将该数称为无平方数因子的数。例如,靠前的一些无平方数因数的数是{1,2,3,5,6,7,10,11,13,14,15,17,19…}。 给出一个整数n,返回第n个无平方数因子的数。
输入:
输入一个整数n. n 的取值范围为1到1,000,000(其中包括1和1,000,000)
输出:
返回第n个无平方数因数的数
举例:
n = 13, 返回19.
答案:
public static int getNumber(int n) {
long result = -1;
int count = 0;
for (long i = 1; i <= Long.MAX_VALUE; i++) {
boolean found = false;
for (long j = 2; j <= i; j++) {
if (j * j > i) {
break;
}
if (i % j == 0 && i % (j * j) == 0) {
found = true;
break;
}
}
if (!found) {
count++;
if (count == n) {
result = i;
break;
}
}
}
return (int) result;
}
3.大雄把自己置身于一个无限大的二维平面中,然后假设,自己每次只能移动一步且不能向后移动,同时走过的格子立即塌陷,无法再走第二次。大雄想知道,如果走n步,有 多少个可能到达的终点。
输入:
一个正整数n(0<n<=20),表示要走n步。
输出:
走n步能到达的终点的数量。
举例:
输入1,输出3。
答案:
public static void numOfPath(int n) {
int[] a = new int[21];
int i;
a[0] = 1;
a[1] = 3;
for (i = 2; i <= 20; i++) {
a[i] = 2 * a[i - 1] + a[i - 2];
}
System.out.println(a[n]);
}