范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

每日一刷面试题,面试必过!之数据结构数组(3)

  想要面试过的去,必须每日一刷题!
  关于Android面试这里我就不多讲了,直接上题。 面试题:1.寻找数组中第二小的元素直接排序(冒泡n^2、快排nlgn)根据索引找到对应值 遍历一次,定义两个变量:一个变量用来存储数组的最大数,初始值为数组首元素,另一个变量用来存储第二大的数。
  编码: 1. public static void findSecond(int a[]){ 2. •        if(a.length<3){ 3. •            System.out.println("数组太小"); 4. •        } 5. •        int max=0,min=0; 6. •        for (int i=1;i=a[i-1]&&i<2){//确定两个最大初始值 8. •                max=a[i]; 9. •                min=a[i-1]; 10. •                continue; 11. •            } 12. •            if(a[i]>max&&i>1){//大于最大值 13. •                min=max; 14. •                max=a[i]; 15. •            } 16. •            if(a[i]min&&i>1){//介于两者之间 17. •                min=a[i]; 18. •            } 19. •        } 20. •        System.out.println("max:"+max); 21. •        System.out.println("min:"+min); 22. •    } 2.找到数组中第一个不重复出现的整数用数组存储每个数字出现的次数,但题目只需要找到第一个不重复出现的数,故浪费空间,O(N^2) 双循环,找到第一个不重复,即返回,O(N^2)
  编码1: 1. /**  2. 找出数组中第一个不重复的数字,如果没有就返回null 3. */ 4. public class FirstDupNum { 5. @Test 6. public void start() { 7. •    int [] arr ={1,2,3,9,7,66,5,5,4,66,3,7,2,9,0,0,1,4}; 8. •    System.out.println(handler(arr)); 9. } 10. public Integer handler(int [] arr){ 11. •    Integer position=null; 12. •    for (int i = 0; i < arr.length; i++) { 13. •        for (int j =0; j 

3.合并两个有序数组

给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。

示例:

方法一:合并后,七大排序 这个方法有点生硬,我将nums2数组拷贝到nums1后面,然后得到一个无顺序的数组,这个时候我们学过的七大排序就派上用场了,这里我采用插入排序为例子:

1. class Solution { 2. •    public  void merge(int[] nums1, int m, int[] nums2, int n) { 3. •        if (n == 0){ 4. •            return; 5. •        } 6. •        for (int i = 0; i < nums2.length; i++) { 7. •            nums1[m + i] = nums2[i]; 8. •        } 9. •        insertSort(nums1,m + n); 10. •    } 11. •    public  void insertSort(int[] array,int length){ 12. •       //这是插入排序 13. •        for (int bound = 1; bound < length; bound++) { 14. •            int tmp = array[bound]; 15. •            int cur = bound - 1; 16. •            for(;cur >=0;cur--){ 17. •                if (array[cur] > tmp){ 18. •                    array[cur + 1] = array[cur]; 19. •                }else { 20. •                    break; 21. •                } 22. •            } 23. •            array[cur + 1] = tmp; 24. •        } 25. •    } 26. }
  时间复杂度:O(N^2) 空间复杂度:O(1)
  方法二:合并后排序  arraycopy(Object src, int srcPos, Object dest, int destPos, int length) Copies an array from the specified source array, beginning at the specified position, to the specified position of the destination array. 意思是,将src数组拷贝到dest目标数组,从0(srcPos)开始拷贝,拷贝到目标数组从m(destPos)开始拷贝,拷n这么长 1. public  void merge(int[] nums1, int m, int[] nums2, int n) { 2. •        System.arraycopy(nums2,0,nums1,m,n); 3. •        Arrays.sort(nums1);//排序 4. •    }
  方法三:双指针法 这个方法有点类似合并两个有序链表 也是用两个指针,一个指向nums1(Copy),一个指向nums2,比较大小然后放入nums1中 具体实现代码如下: 1. •    public  void merge(int[] nums1, int m, int[] nums2, int n) { 2. •        int[] nums1Copy = new int[m]; 3. •        //将nums1新拷贝一份 4. •        System.arraycopy(nums1,0,nums1Copy,0,m);          //两个指针,一个指向nums1Copy,一个指向nums2         int p1 = 0;         int p2 = 0;                  int p = 0;//指向nums1最终要输出的         while ((p1 < m) && (p2 < n)){             nums1[p++] = (nums1Copy[p1] < nums2[p2])? nums1Copy[p1++] : nums2[p2++];         }         if (p1 < m)             System.arraycopy(nums1Copy, p1, nums1, p, m - p1);         if (p2 < n)             System.arraycopy(nums2, p2, nums1, p ,n - p2);     }4.重新排列数组中的正值和负值
  给定一个包含正数和负数的整数数组,重新排列它,使得所有的负数排在前面,所有的正数排在后面。正数间和负数间的相对顺序保持不变。期望时间复杂度是O(n), 空间复杂度是O(1).
  例如: 给定 [-1,2,-2,3,5,-4], 重新排列后变成 [-1,-2,-4,2,3,5]
  分析: 最简单的算法是O(n^2), 遇到每个负数都把它移动到数组前面已经排列好的负数部分后面。 O(n)的算法暂时没想出来,似乎比较难,下面给出一个O(nlogn)的算法。基本思想类似于Merge Sort. 空间复杂度由于用到递归,是O(logn). 不过可以很容易改写为bottom-up的迭代版本。
  编码: 1.     void Main() 2. { 3. •    int[] nums = new int[] {-1, 2, -2, 3, 5, -4}; 4. •     5. •    Reorder(nums, 0, nums.Length-1); 6. } 7.   8. *// Define other methods and classes here* 9. public void Reorder(int[] nums, int start, int end) 10. { 11. •    if(start >= end) { 12. •       return; 13. •   } 14. •    15. •   int middle = start + (end-start)/2; 16. •   Reorder(nums, start, middle); 17. •   Reorder(nums, middle+1, end); 18. •   Merge(nums, start, middle, end); 19. } 20.   21. private void Merge(int[] nums, int start, int end) 22. { 23. •    int i = start; 24. •   while(nums[i] < 0 && i <= end) i++; 25. •   int j = end; 26. •   while(nums[j] >= 0 && j >= start) j--; 27. •    28. •   *// Shift the negative part to the front* 29. •   if(i < j) { 30. •      int k = j; 31. •      while(k>=i && nums[k]<0) k--; 32. •       33. •      Reverse(nums, i, k); 34. •      Reverse(nums,k+1,j); 35. •      Reverse(nums,i,j); 36. •   } 37. } 38.   39. private void Swap(int[] nums, int i, int j) 40. { 41. •    int t = nums[i]; 42. •   nums[i] = nums[j]; 43. •   nums[j] = t; 44. } 45.   46. private void Reverse(int[] nums, int i, int j) 47. { 48. •    while(i < j) { 49. •       Swap(nums, i, j); 50. •       i++; 51. •       j--; 52. •   } 53. }
  下面是自底向上的迭代版本。空间复杂度是O(1)。 1.     public void Reorder(int[] nums) 2. { 3. •    int n = nums.Length; 4. •     5. •    for(int size = 1; size < n; size += size) 6. •    { 7. •        for(int low = 0; low < n-size; low+=size+size) 8. •        { 9. •            Merge(nums, low, Math.Min(low+size+size-1, n-1)); 10. •       } 11. •   } 12. }总结:
  上面所述就是常常被问到的数据结构的数组面试题;后续还有算法、数据结构、Java面试、Android面试题。
  自己也是从事Android开发5年有余了;最近整理了一些Android面经题纲,里面讲解的非常详细。 想要进阶自己、拿高薪的同学请私信我回复"核心笔记"或"面试"领取!

质量最好故障率最低的三大发动机,买车首选很多人在买车的时候会重点关注汽车的发动机,因为发动机关乎整个汽车的动力,那么什么品牌的发动机最好呢?第一名的是本田发动机,本田荣登发动机的故障率是最低的,并且本田发动机被称作黑科技发动机的材质有几种,哪种材质质量最好?众所周知,不同品牌的发动机质量有很大的区别,决定发动机优劣的因素有很多,首先发动机的制作材质就会影响发动机的质量。发动机的材质一般分为2种,一种是常见的铸铁发动机,另外一种是铝制发ROM小米6MIU12开发版面具原厂精简系统AI电话小米6MIU12开发版面具原厂精简系统AI电话智能多项优化字体全免全新体验ROM介绍设备必须保证已经解锁,再刷入一款适合自己手机的TWRPRECOVERY基于MIU12开发版制作加福克斯造型动感又拉风,可惜三缸发动机拖后腿新款福特福克斯传承福特家族式设计风格,采用经典的马丁前脸搭配六边形镀铬前进气格栅,以及尖锐犀利的LED大灯,运动感潮流感拉满,无疑是美式轿车的代名词。在车身尺寸方面,新款福特福克斯没有充电顾虑的岚图FREE,纵享极致驾驶乐趣如果你厌烦了传统的燃油SUV车型,也想跟随潮流体验一下高端新能源SUV的驾驶感觉,不妨来看看岚图FREE。这款岚图FREE的增程式版本不仅可以让你体验到纯电动车的驾驶乐趣,同时也不史上最严游戏健康系统大家好,我是手机里的小白鼠。周二,今天跟大家分享的是,限制未成年人玩游戏一事。新关注的用户,记得星标科技珠峰哟!严格控制未成年人玩游戏以后玩游戏,成年人很难再甩锅给小学生了,他们以鸿蒙系统这些神操,你知道几个?最近大家都研究出来并且讨论的几个鸿蒙系统的宝藏功能,在这儿给各位唠唠。1服务卡片日历自带倒计时其实很多纪念日男同学们总会忘,其中包括了各种纪念日,不得已要下载第三方app提醒着自己放弃了溜背的奥迪AL7,还是你心中的AL7吗?一说到奥迪AL7大家的第一感觉应该就是颜值高,它给人的感觉就好像是上学的时候班级里面暗恋的女神,奥迪AL7在车界就是这样,但是最近奥迪AL7做了些挑战,至于是调成功了还是调失败了,汽车底盘暗藏危险,这几个位置千万别忽略汽车底盘作为汽车三大件,它出现问题的概率并不低于发动机,我们在日常维护保养汽车时,绝对不能忽视对汽车底盘的检查。如果汽车在行驶的过程中出现了漏油异常颠簸以及异响,那很有可能就是减震苹果汽车高管连续辞职,人事管理大地震最近,苹果造车项目的负责人接连跳槽,前苹果造车项目负责人已经到福特汽车担任首席先进技术和嵌入式系统总监。在过去的几个月间,苹果造车项目已经连续失去了四名高管,且都是顶级经理,可谓是飞行摩托来了,你准备好驾驶它了吗?一直以来,让汽车飞上天都是人们梦寐以求的事情,同时飞行汽车也成为了近年来在网络上隔三差五就会被大家拿来讨论的话题,然而直到现在飞行汽车也没个影子,反倒是飞行摩托先问世了。这款飞行摩
8256G大存储也不值钱了,降至879元现货充足,太厚道今年的手机市场真的是只能用乱炖来形容了,尤其是联发科高端芯片的进场,让原本就很内卷的国产中低端旗舰更卷了,很多天玑9000天玑8100新机都很值得入手,23K的价格也能买到很好的手IDEASpringBootplus实现增删改查(CRUD)一前言Mybatis数据持久化框架MybatisPlus对Mybatis进行了增强,它封装了基本的增删改查操作,使我们自己不需要再去写很多重复的代码,大大解放了生产力!二创建项目新海尔智家获行业唯一专利金奖,累计数量最多第二十三届中国专利奖日前正式公布,海尔智家拿下了家电业唯一的金奖。这也是其获得的第11项专利金奖,累计数量为行业第一。要问家电业谁家科技最强,这些数字应该就是一份好的例证。一个企业Go多阶段Docker教程欢迎各位码农!在本教程中,我们将研究多阶段Docker镜像以及如何使用它们来最小化生产Go应用程序所需的容器大小。在本教程结束时,我们将涵盖以下概念什么是多阶段DockerfileRust学习笔记(二十六)何时使用panic总体原则在定义一个可能失败的函数时,优先考虑返回Result,否则就panic!编写示例原型代码测试可以使用panic!演示某些概念可以使用unwrap编写原型代码unwrapexOPPO诚意十足,骁龙778G五千毫安,8128GB仅1499元一说到OPPO手机,很多网友,尤其是米粉们肯定最先想到的就是高价低配,过去该品牌过去推出的产品性价比普遍都很低,特别是一些中端机型,虽然外观设计打磨得很漂亮,但是硬件配置确实相当一莫给虚拟货币矿场留空间来源经济日报随着我国对于虚拟货币监管的持续加码,比特币挖矿的非法性质也在司法实践中得到进一步明确。截至目前,多地法院判决比特币等虚拟货币相关的交易合同无效。这些判决为今后类似案件的清除藏在贴身衣物中的隐形威胁海信1kg悦己系列内衣机好评如潮随着生活品质不断提升,人们的健康观念也在不断增强。内衣作为每天与人体肌肤贴身接触的衣物,如果没有经过充分洗涤,隐藏其中的威胁可能会给大家的身体带来健康隐患。为解决这一痛点,海信专门抢票加速服务,真管用还是大忽悠?又到一年春运抢票高峰期,一些热门方向的车票难免会出现一票难求的现象,于是抢票加速服务再次大量上线。1月5日,上海市消保委发布了4家平台抢票加速服务测试结果,发现不同平台抢票所需支付美团启动2022全国网上年货节北京商报讯(记者魏蔚)1月10日,美团联合平台百万商户启动2022全国网上年货节活动,围绕吃住行游购多种场景,推出满减红包年货5折等优惠,涵盖外卖美食酒店生鲜即时零售等200多个品智能手写笔赋能教育未来五年有望降至百元一支本报记者王丽新在双减政策落地后的第一个GET教育科技大会上,智能笔引发了关注。在教育信息化的路上,在去屏化的大背景下,如何实时的无感的采集教学数据成为学生和老师端教育硬件选型的焦点