今日头条Android 实习岗 一面题目

参加了头条的Android 的一面 做一个小的总结

1手写算法 题目求: -1 2 3 -5 -7 -8 6 5 3 1 -5 8 的最大子串 (要求子串连续 且相加值为所有字串的最大)

面试时想出的算法就是

int []array={-1, 2, 3, -5, -7, -8, 6, 5, 3, 1, -5, 8};

int max=array[0];

for(int i=0;i<array.length;i++)

{

int sum=0;

for(int j=i+1;j<array.length;j++)

{

sum=sum+array[j];

if(sum>max) max=sum;

}

}

system.out.println(max);

但是面试官说事件复杂性太高 要求优化,当时没有想到好的方法。

后来分析得到更好的算法

public int FindGreatestSumOfSubArray(int[] array) {
    int max=Integer.MIN_VALUE;
    int sum=0;
    for(int i=0;i<array.length;i++)
    {
        sum+=array[i];
        if(max<sum) max=sum;
        if(sum<0) sum=0;
    }
        return max;
    }

算法题考察了这一道

其余的知识点

1jvm的内存怎么分配的

2jvm的gc机制以及相关算法

3引用的简介   弱引用的死亡时间

4HashMap的原理

5 怎么解决hashmap不安全的问题  以及对hashmap加synchronized锁的负面影响,以及怎么消除

6 tcp的三次握手,四次挥手,tcp报文格式

7synchronized 和lock的区别

8Android 的view 绘制流程 以及详细解释 onmeasure onlayout ondraw的实现

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值