算法题

作者: 黄靠谱 | 来源:发表于2019-02-17 19:12 被阅读45次

带答案的知乎回答啊,太良心了
https://www.zhihu.com/question/24964987

  1. 4G内存计算机,如何从1000亿个数中找到最大的1000个
    拆分+最小堆(比堆顶要小的数据,直接丢弃,比堆顶大的数据,则replace堆顶,再Sink)

  2. 单向链表中如何在O(1)内删除某一个节点

targetNode.value=targetNode.next.value
targetNode.next=targetNode.next.next
  1. 一次遍历找到单向链表中间节点
    设置2个游标一起走,第一个游标步长为2,第二个游标步长为1,当第一个游标遍历到链表的尽头时,就是中间节点

  2. 单向链表的排序(时间复杂度为 N*LogN)

  • 从中间拆断链表(不停的拆分)(pre.next=null)
  • 最后再merge起来
public ListNode sortList(ListNode head) {
        return head == null ? null : mergeSort(head);
    }

    private ListNode mergeSort(ListNode head) {
        if (head.next == null) {
            return head;
        }
        ListNode p = head, q = head, pre = null;
        while (q != null && q.next != null) {
            pre = p;
            p = p.next;
            q = q.next.next;
        }
        //拆断了链表,把tail.next设置为null
        pre.next = null;
        ListNode l = mergeSort(head);
        ListNode r = mergeSort(p);
        return merge(l, r);
    }

    ListNode merge(ListNode l, ListNode r) {
        ListNode dummyHead = new ListNode(0);
        ListNode cur = dummyHead;
        while (l != null && r != null) {
            if (l.val <= r.val) {
                cur.next = l;
                cur = cur.next;
                l = l.next;
            } else {
                cur.next = r;
                cur = cur.next;
                r = r.next;
            }
        }
        if (l != null) {
            cur.next = l;
        }
        if (r != null) {
            cur.next = r;
        }
        return dummyHead.next;
    }
}
  1. 如何基于栈实现一个队列
    栈的特点:后进先出,队列的特点:FIFO,所以利用一个辅助的栈,可以实现FIFO,每次插入到栈中的时候,遍历从上面把所有的Entry Pop到辅助栈中,就可以实现FIFO了

相关文章

  • Android面经| 算法题解

    整理了校招面试算法题,部分《剑指offer》算法题,以及LeetCode算法题,本博文中算法题均使用Java实现校...

  • 面试题高频算法题整理

    以下算法题几乎都是简单题,都为面试算法题值得刷的题,需要理解并记住解题思路,而其中★标注的题,更是面试算法题中的高...

  • 回溯,贪心,动态规划

    1.回溯算法思想leetcode 112 号算法题:路径总和leetcode 113 号算法题:路径总和 IIle...

  • 算法题

    一、对一组数据进行降序或者升序排序(冒泡算法) intnums[10] = {4,5,1,10,7,1,8,3,6...

  • 算法题

    现在有一个字符串 string,它是一段英文,要求你统计这段英文里每个字母出现的次数。*例如输入 'Hello',...

  • 算法题

    名企笔试:网易2017春招笔试(工作安排)【http://mp.weixin.qq.com/s/y08d3WhZK...

  • 算法题

    写一个方法 获取一个字符串的长度? 写一个冒泡排序 数组去重 javascript实现格式化输出,比如输入9999...

  • 算法题

    1.求出1-100累加的和 2.求出1-100中奇数相加的和 3.求1000以内的斐波那契数 4.求1000以内的素数

  • 算法题

    1、求二进制数字中1的个数 自带库 (binary_num).count('1') 按位运算符有:左移运算符(<<...

  • 算法题

    1. 租金卡大放送 题目:“司庆大放送,一元即租房”,司庆当日,签约入住的客户,住满30天,返还(首月租金-1元)...

网友评论

      本文标题:算法题

      本文链接:https://www.haomeiwen.com/subject/mrageqtx.html