面试记录

2019-06-21  本文已影响0人  浩泽Hauser

泛型Generic的概念。
使用了方括号<>的,就是泛型。泛型里面必须是一个object,不能是基础数据类型如int,double.
object的例子如自定义的一个class,Integer, Double等。
Integer: 是一个class,是一个object,可以等于null。而int不能为null。例如int a = null会报错,而Integer b = null 不报错。
Double同理,Double是object,而double是java的八大primitive data type之一,不能为null。
当使用了Comparator<>, 方括号里面必须是object,用Integer正确,用int错误。而且下面这一题中,用了comparator导致传入参数也要是Integer[] 而不是 int[].

public String output(Integer[] arr) {
    Arrays.sort(arr, new Comparator<Integer>() {
        @Override
        public int compare(Integer a, Integer b) {
            if(a.equals(b)) {
                return 0;
            }
            String s1 = a + "" + b;
            String s2 = b + "" + a;
            int first = Integer.parseInt(s1);
            int second = Integer.parseInt(s2);
            return second - first;
        }
    });
 
    StringBuilder sb = new StringBuilder();
    for(Integer i : arr) {
        sb.append(i);
    }
    return sb.toString();
}

面试题:给一个List<Long>和Long target,求list的subsequence(非连续子数列),让subsequence的sum<=target, 返回最大的sum。
用recursive来写。

  public long max = Long.MIN_VALUE;
  public long maxSum(List<Long> list, Long target){
    if(list==null || list.size()==0) return 0;
    helper(list,target,0,0);
    return max;
  }

  public void helper(List<Long> list, Long target, long sum, int cur){
    if(sum>max && sum<=target) max=sum;
    if(sum > target || cur>=list.size()) return;
    helper(list,target,sum,cur+1);
    helper(list,target,sum+list.get(cur),cur+1);
  }
上一篇 下一篇

猜你喜欢

热点阅读