首页 > 笔经面经 > 字节跳动 头条客户端凉经 😭

字节跳动 头条客户端凉经 😭

头像
Offer+=100
编辑于 2020-01-21 16:24:20 APP内打开
赞 4 | 收藏 38 | 回复6 | 浏览2964

字节跳动 头条客户端凉经

  • 自我介绍

    算法题:

  • Q:找出一个数组的长度Top k的升序子数组,并按长度降序输出。
  • 输入:[2,1,4,5,8,3,7,10,2,5] k=2
  • 输出:[1,4,5,8],[3,7,10]
  • 思路:刚开始和面试官聊思路,我以为是找出升序子数组然后把他们里面的元素降序输出,做完后才发现理解错题意了。题目的意思就是找出升序子数组,按照子数组的长度降序输出子数组。。。
public class Main {

    public void reverse(int[] array, int k){
        //找升序子数组
        int[] pivot = new int[k];//存第i个子数组的开始坐标
        int[] end = new int[k];//存第i个子数组的结束坐标
        int j = 0;
        int pivot_temp = 0;
        int end_temp = 0;
        for(int i=0; i<array.length;){
            if((i != array.length-1) && (array[i] > array[i+1])){
                if(end_temp > pivot_temp){
                    pivot[j] = pivot_temp;
                    end[j] = end_temp;
                    j++;
                }
                i++;
                pivot_temp = i;
                end_temp = pivot_temp;
            }else{
                i++;
                end_temp++;
            }

        }
        /*
          按照子数组长度降序
         */
        int[] len = new int[k];
        int[] index = new int[k];//存储降序顺序  index 与len 一一对应
        for(int i=0; i<k; i++){
            len[i] = end[i] - pivot[i] +1;
            index[i] = i;
        }
        for(int i=0; i<k; i++){//选择排序   //index[i]  是存Top i长度max的数组的索引
            for(int w=i; w<k; w++){
                if(len[w] > len[i]){
                    int temp = len[w];
                    len[w] = len[i];
                    len[i] = temp;
                    int index_temp = index[w];
                    index[w] = index[i];
                    index[i] = index_temp;
                }
            }
        }
        //输出
        for(int i=0; i<k; i++){
            System.out.print("[");
            for(int w=pivot[index[i]]; w=end[i]; w--    没把for循环条件改回来导致输出为空,只说了思路开始问java基础。好亏啊这种窒息操作
                if(w == end[index[i]]){
                    System.out.print(array[w]);
                }else{
                    System.out.print(array[w] + ",");
                }
            }
            if(i == k-1){
                System.out.print("]");
            }else{
                System.out.print("],");
            }
        }

    }

    public static void main(String[] args) {
        int[] test = new int[]{2,1,4,5,8,3,7,10,2,5};
        Main main = new Main();
        main.reverse(test,2);
    }
}
  • 大佬们有更简单的麻烦贴一下,我学习学习,实在是太菜了。

    Java基础

  • 说一说Java内存模型、JVM内存模型
  • HashMap怎么实现的
  • 线程 wait()和sleep()区别
  • 线程安全怎么实现
  • 说一说垃圾回收算法

    Android基础(估计是看我有Android基础才问的。0基础不会问,我看其他0基础的问的大都是计网和java基础!啊!没复习啊!)

  • Android页面绘制流程
  • Handler在子线程怎么使用
  • 就完了......

6条回帖

回帖
加载中...
话题 回帖

推荐话题

相关热帖

笔经面经近期热帖

近期精华帖

热门推荐