zoukankan      html  css  js  c++  java
  • 面试题(8)之 在线题

    导言:

      前几天约了一家外包到百度公司的面试;今天下午接到hr小姐姐的电话,说是先在线做题,那就约好了晚上做题,下班回去就开始做题了,2道题,做了将近一个半小时,哎。

      特此记录了一下

    面试题一

     链表

    数组不总是组织数据的最佳数据结构。原因如下:

    在很多编程语言中,数组的长度是固定的,所以当数组已被数据填满时,在要加入新的元素就会非常困难。

    在数组中,添加和删除元素也是很难麻烦的,因为需要将数组中的其他元素向前或向后平移,以反映数组刚刚进行了添加或删除的操作。

    然而,JavaScript 的数组并不存在上述问题,因为使用split()方法不需要要在访问数组中的其他元素了。

    JavaScript中数组的主要问题是,他们被实现成了对象,与其他语言(比如C++ java)的数组相比,效率很低。

    如果你发现数组在实际使用中很慢时,就可以考虑使用链表来替代它。除了对数组的随机访问,链表几乎可以用在任何可以使用以为数组的情况中。

    如果需要需要随机访问,数组任然是更好的选择。

    思路-链表的指针变换

    链表的题目一般都需要使用一个虚拟的节点来作为中间节点,不停改变指针的值。

     方法一

    function reverseLinkedList(head) {
        //  链表的指针变换。
        // 如果 head 或者 head.next 为 null,返回null
        if (head==null || head.next==null){
            return head;
        }
        // pre 记录前驱节点
        var pre = null;
        // 使用 next 指针记录当前节点
        var next = null;
        // 如果 head 不为 null
        while (head != null) {
            // 获取 头结点以后 链表,方便下次遍历
            next = head.next;
            // 将上次的链表投节点 拼接在此次头结点后——翻转节点
            head.next = pre;
            // 获取此次的 链表头结点
            pre = head;
            // 将 头结点以后的链表 赋值给 head,方便下次遍历
            head = next;
        }
        return pre;
    }

    方法二

    //法二
    function reverseLinkedList(head) {
        if(head==null || head.next==null){
            return head;
        }
        var list = head;
        var p = list;
        var q= null;
        while(p.next!=null) {
            q = p.next;
            p.next = q.next;
            q.next = list;
            list = q;     
        }
        return list;
    }

    面试题二

    答案:

      let arr = [
        [1, 2, 3],
        [4, 5, 6]
      ]
      function rotateMitrix(mitrix) {
        let m = mitrix.length //
        let n = mitrix[0].length //
        let getArr = []
        let temp = new Array()
        for(let i = 0; i < n; i++) {
          temp[i] = []
          for(let j = 0; j < m; j++) {
            temp[i][j] = mitrix[m - j - 1][i]
          }
          getArr.push(temp[i])
        }
        console.log(getArr)
        return getArr
      }
      rotateMitrix(arr)

  • 相关阅读:
    【计算几何】多边形交集
    【计算几何】点在多边形内部
    【计算几何】线段相交
    【计算几何】多边形点集排序
    【JavaScript学习】JavaScript对象创建
    【CUDA学习】内核程序调试
    【CUDA学习】共享存储器
    【CUDA学习】全局存储器
    Charles是Mac的Fiddler抓包工具
    Charles是mac的iddler抓包工具
  • 原文地址:https://www.cnblogs.com/houfee/p/11080213.html
Copyright © 2011-2022 走看看