![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
@会飞的鱼≯
对的时间遇上对的人
展开
-
topk问题:求最小或最大的k个数,求第k大或第k小的数
最近做了道算法题,题目大概意思如下:输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。 题目看起来不难,但是想要比较用比较高效的算法对于我这种新手来说还是比较困难的。 1.我最开始想到的是用做k轮选择排序(其实就是求k次最小值),因为选择排序有个特点就是每次都会,确定一个最小值,这样我们的时间复杂度就位 o(n * k)。 2.其次我有想到直接使用快速排序,在取前k个数,这样复杂度为o(nlogn) 对比了一下1,2,在k原创 2020-08-03 19:53:09 · 352 阅读 · 0 评论 -
剑指 Offer 57 - II. 和为s的连续正数序列
题目 :输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 代码如下: class Solution { ArrayList<int[]> lists = new ArrayList<int[]>(); int i = 1; //滑动窗口左边界 int j = 1; //滑动窗口右边界 int sum = 0; //滑动窗口中的和原创 2020-08-02 22:32:39 · 129 阅读 · 0 评论 -
面试题06:逆向打印链表,以数组形势返回
代码如下,已给出详细注释,主要思路就是先将链表反转,再遍历链表保存到数组中 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public int[] reversePrint(ListNode head) {原创 2020-07-04 13:26:11 · 79 阅读 · 0 评论