2021秋招遇到的笔试题 Java岗

本文汇总了2021秋季招聘中Java岗位的笔试算法题目,包括将二进制数第二位0改1、数字重排列、回文串构建、寻找下一个水仙花数、版本号比较、最小路径和、最多任务数、滑动窗口最大增量以及链表格式化等。涉及逻辑思维、数组操作和字符串处理等多个方面。


科大讯飞: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,就可以把原字符串变成回文串。换句话说,最少补上三个字符。
你的任务就是找到使得原来的字符串变成回文串所需要的最少字符数量。
本题数据保证没有空串,因此不考虑空串是否为回文串。
保证输入的字符串仅包含小写字母。
输入:一行一个字符串,代表小美交给你的字符串。
输出:一行一个整数,表示将小美给出的字符串变成回文字符串所需要添补的最少字符数量。
例子:输入abaaca,返回3.
代码

public static void main(String[] args) {
	Scanner sc=new Scanner(System.in);
	String str = sc.nextLine();
	int res = minReturnStr(str);
	System.out.println(res);
}

public static int minReturnStr(String str) {
	int length=str.length()-1;
	// 头尾判断
	int i=0,j=length;
	int begin=i;
	boolean flag=false;
	while(i != j && i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值