网上遇到的面试题

题目:
写一个方法,要求参数int类型,如:传入一个12345,返回结果54321。
面试的时候遇到这个题,还有个要求,是方法体内的代码不能超过8行,而且还要用递归。


public static void main(String[] args) {
System.out.println(f(12345, 0));
}

public static int f(int i, int j) {
return i < 10 ? f(i / 10, (i % 10 + j) * 10) : i + j;
}


题目:
给定一个有序数组,统计其中不重复的绝对值的个数。(这个数组可能很长)
例如 int[] A = new int[]{-5, -3, -1, 0, 3, 6}; 不重复的绝对值有 5,3,-1,0, 6。 所以结果为5。

public static void main(String[] args) {
int arr[] = new int[] { -20, -18, -16, -4, -1, 1,5, 8, 9, 18, 20};
System.out.println(getCount(arr));
}

public static int getCount(int[] arr) {
int length = arr.length;
int count = getIndex(arr, 0, length, 0) + 1;// 得到<=0的数据个数
if (count == 1 || count == length)
return arr.length;
int i = count; // 得到第一个>0的数的数组下标
while (i < length) {
if (arr[i] + arr[0] > 0)
return count + length-i;
if (arr[getIndex(arr, 0, count, -arr[i])] + arr[i] != 0) {
count++;
}
i++;
}
return count;
}

/**
* 获得数组arr中最后一个数据小于等于k的数组下标
*
* @param arr
* @param i
* 左指针
* @param j
* 右指针
* @param k
* 边界
* @return
*/
public static int getIndex(int[] arr, int i, int j, int k) {
while (i != j - 1) {
int x = (i + j) / 2;
if (arr[x] > k)
j = x;
else
i = x;
}
return i;
}


题目:
有三个int, a, b, k . 其中 0<=a<=b, k>0. 统计a ,b 之间能被k整除的数的个数(含 a,b )。
例如a =6 , b = 11, k =2, 结果应该为3, 因为 6,8, 10 三个数能被2整除。

public static void main(String[] args) {
System.out.println(f(0, 9, 3));
}

public static int f(int a, int b, int k) {
return a%k==0?(a % k + b - a) / k + 1:(a % k + b - a) / k;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值