摘要: 1.算法思路: 选择一个基准点,将数组中比基准点小的值移到基准值左边,比基准值大的移到基准值右边。然后递归调用,将基准值左右两边的数组做同样操作,递归结束的条件是数组只有一个元素。 基准点归位的方法: 设一头一尾两个指针,右指针向左找比第一个基准值小的数,找到后将值赋给右指针指向的数,左指针向右找第 阅读全文
posted @ 2019-10-25 23:21 teensSpirit 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 1.题目描述: 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 2.解题思路及代码: 看到O(n log n)时间复杂度,第一时间想到用归并排序或者快排,但是链表交换节点太麻烦,遂选择归并排序 用归并排序排序数组难点在于如何快速找到链表中点,便于后续递归调用。后来看了题解 阅读全文
posted @ 2019-10-25 22:54 teensSpirit 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 1.题目描述 输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以答案为2 2.代码 题目链接:https://www.nowcoder.com/questionTerminal/6ffdd7e4197c403e88c6a8aa3e7a332a 阅读全文
posted @ 2019-10-24 22:57 teensSpirit 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 1.题目描述: 编写一个程序,找到两个单链表相交的起始节点。 2.解题思路及代码 设置双指针,分别指向两个链表头部,向后遍历,到达表尾后指向另一指针的头部,则某一时刻两个指针指向的结点相同,若链表相交,则指向非空结点,若不相交,则同指向NULL. 代码如下: 3.算法分析: 时间复杂度:O(M+N) 阅读全文
posted @ 2019-10-23 23:54 teensSpirit 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 1.题目描述: 给定一个链表,判断链表中是否有环。 2.思路以及代码: 建立一个哈希表,然后遍历链表,每遍历一个结点就将其加入哈希表中,如果当前结点已存在于哈希表中,存在环形。 代码如下: 代码参考:力扣官方题解:https://leetcode-cn.com/problems/linked-lis 阅读全文
posted @ 2019-10-22 22:21 teensSpirit 阅读(76) 评论(0) 推荐(0) 编辑
摘要: 1.算法思路: (1)将待排序数组分为两份,利用递归将两份数组排好序 (2)将两个有序数组归并成一个有序数组。 实现方法: a.设置两个指针,分别指向两个数组的开头,比较指针所指向的数字,将较小的数字加入一个辅助数组中,指针前移,直到其中一个指针溢出 b.将未溢出的数组剩余的元素加入辅助数组中 c. 阅读全文
posted @ 2019-10-22 21:46 teensSpirit 阅读(88) 评论(0) 推荐(0) 编辑