三道初级Java工程师笔试题

「已注销」
博客专家认证
2017-02-22 09:50:20
某著名互联网公司的社招初级Java工程师笔试编程题目。

1.在字符串中找到首次出现两次的字符。如"helloword",首次出现两次的是字符“l”。

2.在整型数组中把每个元素拼接成整数,求最小的权重值。例如有三个月元素的整型数组{3, 11, 12},那么他们的拼接的可能组合有:
31112
31211
11312
12311
12113
最小的值应该是那个:11312。

3.写出二分查找的递归实现代码。

以上是笔试题,下面是一道面试题。
问:List如何去重,当List元素是基本数据类型怎么去重,当List元素是对象的时候怎么出重。

其中第1题,第3题已手写代码交卷,第2题在休息代码写在草稿纸上,但是无机会呈现面试官,而且思路也不正确。面试效果不佳,除了选择题乱勾,3道编程题写了2道之外。面试题一道都回答不上来,每个问题都都是一脸蒙逼,看来我还是太年轻。
...全文
969 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Freeman0432 2018-05-25
  • 打赏
  • 举报
回复
第二题,供参考:
@Test
public void questoin() {

	int[] ia = { 3, 11, 12 };
	String[] strings = new String[ia.length];

	// 把int数组转成String数组,方便比较和排序
	for (int i = 0; i < ia.length; i++) {
		strings[i] = String.valueOf(ia[i]);
	}

	// 排序
	Arrays.sort(strings);

	// 先拼成字符串
	StringBuilder sb = new StringBuilder();
	for (int i = 0; i < strings.length; i++) {
		sb.append(strings[i]);
	}

	// 按题目要求转成整型
	int result = new Integer(sb.toString());

	System.out.println("最小的权重值:" + result);

}
[/align]
「已注销」 2017-03-02
  • 打赏
  • 举报
回复
并归排序:

/**
 * 
 * @author shizongger
 * 并归排序
 */
public class MergeSort {

	public static void main(String[] args) {
		int[] array = {100, 86, 11, 100, 8, 6};
		mergeSort(array);
		
		for(int i = 0; i < array.length; i++) {
			System.out.print(array[i] + " ");
		}
	}
	
	//归并排序
    public static void mergeSort(int[] arr){
        int[] temp =new int[arr.length];
        internalMergeSort(arr, temp, 0, arr.length-1);
    }
    
    private static void internalMergeSort(int[] a, int[] b, int left, int right){
    	int mid = (left+right)/2;
    	if(left < right) {
    		internalMergeSort(a, b, left, mid);
    		internalMergeSort(a, b, mid+1, right);
    		mergeSortedArray(a, b, left, mid, right);
    	}
    }
    
    // 合并两个有序子序列 arr[left, ..., middle] 和 arr[middle+1, ..., right]。temp是辅助数组。
    private static void mergeSortedArray(int arr[], int temp[], int left, int middle, int right){
    	int leftIndex = left;
    	int rightIndex = middle+1;
    	int index = 0;
    	
    	while(leftIndex <= middle && rightIndex <= right) {
    		if(arr[leftIndex] <= arr[rightIndex]) {
    			temp[index++] = arr[leftIndex++];
    		} else {
    			temp[index++] = arr[rightIndex++];
    		}
    	}
    	
    	while(leftIndex <= middle) {
    		temp[index++] = arr[leftIndex++];
    	}
    	while(rightIndex <= right) {
    		temp[index++] = arr[rightIndex++];
    	}
    	
    	//将temp的值复制到arr
    	for(int i = 0; i < index; i++) {
    		arr[left+i] = temp[i];
    	}
    }   
}
_明月 2017-02-25
  • 打赏
  • 举报
回复
「已注销」 2017-02-23
  • 打赏
  • 举报
回复
引用 9 楼 windowsoahil 的回复:
前两题,第二题为什么不是11123?
public static void main(String[] args) {
        String s = "helloworld";
        Set<Character> set = new HashSet<>();
        for (char c : s.toCharArray()) {
            if (set.contains(c)) {
                System.out.println(c);
                break;
            }
            set.add(c);
        }

        int[] a = new int[] {3, 11, 12};
        System.out.println(Arrays.stream(a).mapToObj(String::valueOf).sorted().collect(Collectors.joining()));
    }
恩,应该是11123。
解开者 2017-02-23
  • 打赏
  • 举报
回复
前两题,第二题为什么不是11123?
public static void main(String[] args) {
        String s = "helloworld";
        Set<Character> set = new HashSet<>();
        for (char c : s.toCharArray()) {
            if (set.contains(c)) {
                System.out.println(c);
                break;
            }
            set.add(c);
        }

        int[] a = new int[] {3, 11, 12};
        System.out.println(Arrays.stream(a).mapToObj(String::valueOf).sorted().collect(Collectors.joining()));
    }
「已注销」 2017-02-23
  • 打赏
  • 举报
回复
引用 7 楼 qq_35209952 的回复:
[quote=引用 5 楼 zhang5476499 的回复:] 笔试题还将计就计会做几个,面试题,面试官的问题,我一个都答不上来。
面试还问啥了... 感觉去重这个也不是很难呀.. [/quote]问的都是基础题,很多东西不用,都忘记了。
逗泥丸的平方 2017-02-23
  • 打赏
  • 举报
回复
引用 5 楼 zhang5476499 的回复:
笔试题还将计就计会做几个,面试题,面试官的问题,我一个都答不上来。
面试还问啥了... 感觉去重这个也不是很难呀..
jiajing1990_ 2017-02-23
  • 打赏
  • 举报
回复
引用 4 楼 zhang5476499 的回复:
引用 3 楼 jiajing1990_ 的回复:
什么公司面试这么麻烦
某著名互联网公司,笔试题目很多,我只是选择了编程题目而已,手写代码。
像这样的 要是没人看着 直接网上搜 我一直以为面试应付人就可以了
「已注销」 2017-02-23
  • 打赏
  • 举报
回复
引用 2 楼 qq_35209952 的回复:
路过一下.. 不知道你要问什么.. 这是笔试吗 笔试感觉有点坑呀... 不知道第一题的考点是什么,得出结果就可以吗? 不过题目简单看起来也不会有效率问题... 当然我感觉第一思路还是toCharArray()然后双重循环.. 第二题有点小麻烦... 比如 154 和 129 放在一起, 还是129在前面划算一些. 其实应该是先按照字符串的方式来比较一下吧,逐位比较,排序...考点应该是重写比较器吧.. 第三题,好麻烦. 不想看..反正我没去面试 面试题.. 除虫你说用Set吗.. 看起来和笔试第一题一样 那就用Set吧.. 要不然也是n^2...(反正List的contains复杂度应该也是n)
笔试题还将计就计会做几个,面试题,面试官的问题,我一个都答不上来。
「已注销」 2017-02-23
  • 打赏
  • 举报
回复
引用 3 楼 jiajing1990_ 的回复:
什么公司面试这么麻烦
某著名互联网公司,笔试题目很多,我只是选择了编程题目而已,手写代码。
jiajing1990_ 2017-02-23
  • 打赏
  • 举报
回复
什么公司面试这么麻烦
逗泥丸的平方 2017-02-23
  • 打赏
  • 举报
回复
路过一下.. 不知道你要问什么.. 这是笔试吗 笔试感觉有点坑呀... 不知道第一题的考点是什么,得出结果就可以吗? 不过题目简单看起来也不会有效率问题... 当然我感觉第一思路还是toCharArray()然后双重循环.. 第二题有点小麻烦... 比如 154 和 129 放在一起, 还是129在前面划算一些. 其实应该是先按照字符串的方式来比较一下吧,逐位比较,排序...考点应该是重写比较器吧.. 第三题,好麻烦. 不想看..反正我没去面试 面试题.. 除虫你说用Set吗.. 看起来和笔试第一题一样 那就用Set吧.. 要不然也是n^2...(反正List的contains复杂度应该也是n)
「已注销」 2017-02-22
  • 打赏
  • 举报
回复
第1题的解:

import java.util.HashMap;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		System.out.print("输入字符串:");
		Scanner sc = new Scanner(System.in);
		String str = sc.nextLine();
		
		HashMap<Character, Integer> hm = new HashMap<Character, Integer>();
		for(int i = 0; i < str.length(); i++) {
			char c = str.charAt(i);
			if(hm.get(c) != null) {
				hm.put(c, hm.get(c) + 1);
				if(hm.get(c) == 2) {
					System.out.println(c + "在字符串中第一次出现两次");
					break;
				}
			} else {
				hm.put(c, new Integer(1));
			}
		}
	}

}
第3题,解题思路。http://blog.csdn.net/zhang5476499/article/details/48831509

public class BinarySearch {

	public static int bSearch(int[] arr, int target) {
		int i = -1;
		int left = 0;
		int right = arr.length-1;
		
		while(left <= right) {
			int mid = (left+right)/2;
			if(arr[mid] < target) {
				left = mid+1;
			} else if(arr[mid] > target) {
				right = mid-1;
			} else {
				return mid;
			}
		}
				
		return i;
	}
	
	public static int bSearch1(int[] arr, int target, int left, int right) {
		int index = -1;
		if(left <= right) {
			int mid = (left+right)/2;
			if(arr[mid] > target) {
				index = bSearch1(arr, target,left, mid-1);
			} else if(arr[mid] < target) {
				index = bSearch1(arr, target, mid+1, right);
			} else {
				return mid;
			}
		}
		return index;
	}
	
	public static void main(String[] args) {
		int[] arr = {1, 3, 13, 17, 21, 128};
		int target = 2;
		int index = bSearch(arr, target);
		System.out.println(target + "在数组的下标:" + index);
		
		int index1 = bSearch1(arr, target, 0, arr.length-1);
		System.out.println(target + "在数组的下标:" + index1);
	}

}
出重,当时想不出来,都是自己太low了,其实就是把List的值放进Set里面就行了,基本数据类型自动去重。

	public static void main(String[] args) {
		List<Integer> list = new ArrayList<Integer>();
		list.add(1);
		list.add(0);
		list.add(0);
		list.add(8);
		list.add(6);
		System.out.println(list);
		
		Set<Integer> set = new HashSet<Integer>();
		set.addAll(list);
		System.out.println(set);
	}
如果是对象,需要对我们的JavaBean重写equals()方法和hashCode()方法。 Person.java

public class Person {
	private int age;
	private String name;
	private boolean sex;
	
	public Person(int age, String name, boolean sex) {
		this.age = age;
		this.name = name;
		this.sex = sex;
	}
	
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public boolean isSex() {
		return sex;
	}
	public void setSex(boolean sex) {
		this.sex = sex;
	}
	
	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Person) {
			Person stu = (Person)obj;
			return stu.age == this.age && stu.name == this.name && stu.sex == this.sex;
		}
		
		return false;
	}
	
	@Override
	public String toString() {
		return "[name:" + this.name + ",age:" + this.age + ",sex:" + this.sex + "]";
	}
	
	@Override
	public int hashCode() {
		String in = name + age + sex;
		return in.hashCode();
	}
}
main方法

	public static void main(String[] args) {
		Person p1 = new Person(20, "lily", false);
		Person p2 = new Person(20, "lily", false);
		Person p3 = new Person(21, "shizongger", true);
		List<Person> list = new ArrayList<Person>();
		list.add(p1);
		list.add(p2);
		list.add(p3);
		
		System.out.println(list);
		
		Set<Person> set = new HashSet<Person>();
		set.addAll(list);
		System.out.println(set);
	}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧