2021秋招遇到的笔试题 Java岗


科大讯飞:Java开发

将num值二进制形式中第二位0改为1

题目:输入一个正整数,将其二进制第二位0改为1。例如:10=(1010)2,返回14=(1110)2。
代码

	/**
	 * 将num二进制中第二位0改为1
	 * @param num [1,10^9]
	 * @return
	 */
	public static int changeNumber (int num) {
		// 找到num第二个0
		int i=num;
		int sum=0;
		int twice=0;
		while(i != 0 && twice<2) {
			if(i%2 == 0) {
				// 当前有一位0
				twice++;
			}
			sum++;
			// 无符号右移一位
			i >>>= 1;
		}
		while(twice != 2) {
			sum++;
			twice++;
		}
		sum--;
		return num | 1<<sum;
	}

美团:后端开发

判断数字能否重排列

题目:小美给小团一个n个数字构成的数字序列,问小团能不能经过重新排列后形成1到n的排列。
举例:
小美给小团[2, 1, 3],则可以经过重新排列后构成[1, 2, 3],这是可行的。
小美给小团[4, 4, 1, 3],则无法经过重新排列后构成[1, 2, 3, 4],这是不可行的。
为了防止小团靠运气碰对答案,小美会进行多组询问。
输入

2
3
2 1 3
4
4 4 1 3

输出

Yes
No

代码

/**
 * 第一行是一个数T,表示有T组数据。
 * 对于每组数据:
 * 第一行一个数字n表示小美给出的序列由n个数字构成。
 * 接下来一行n个空格隔开的正整数。
 */
public static void main(String[] args) {
	Scanner sc=new Scanner(System.in);
	// 总共有sum组数据
	int sum=sc.nextInt();
	while(sum-- > 0) {
		// 当前组的数组长度为length
		int length=sc.nextInt();
		int[] arr=new int[length];
		for(int i=0;i<length;i++) {
			arr[i]=sc.nextInt();
		}
		boolean res = isSequence(arr);
		if(res) {
			System.out.println("Yes");
		} else {
			System.out.println("No");
		}
	}
}

public static boolean isSequence(int[] arr) {
	Arrays.sort(arr);
	if(arr[0] != 1 || arr[arr.length-1] != arr.length) {
		return false;
	}
	for(int i=1;i<arr.length;i++) {
		if(arr[i] != arr[i-1] + 1) {
			return false;
		}
	}
	return true;
}

小美的回文串构建

题目:小美现在有一个字符串,小美现在想知道能不能通过在字符串的尾端增加若干字符使得整个字符串变成一个回文串。
回文串的定义:若一个字符串,对他正序遍历和倒序遍历得到的结果是完全一致的,就称它是一个回文串。例如 abcba 就是一个回文串,因为无论正序还是倒序都是一样的。
对于字符串 abaaca,显然在该字符串末尾继续补上三个字符 aba 就可以构成 abaacaaba,就可以把原字符串变成回

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值