`
jh108020
  • 浏览: 107079 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

网上遇到的面试题

阅读更多
题目:
写一个方法,要求参数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;
	}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics