lettcode
呼啸蓝天
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 35. 复杂链表的复制
文章目录题目请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。思路这道题不简单,或许有人像我一样直接return提供的头节点一样,但通不过检查。其实普通链表的复制很简单,使用双指针遍历链表即可,但还有random指针就不好做了。 public static ListNode copyRandomList(ListNode head) {原创 2021-12-08 21:51:38 · 142 阅读 · 0 评论 -
剑指 Offer 24. 反转链表
反转链表题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000思路:小米的面试中出现过,考察coder操作链表的基本操作。很简单的一个思路就是在遍历链表的过程中把next指针由原先指向下一个结点改变为指向前一个结点,注意指针移动的先后顺序,我们这里使用双指针,包原创 2021-12-08 17:06:51 · 318 阅读 · 0 评论 -
剑指 Offer 30. 包含min函数的栈
包含min函数的栈定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。思路:使用两个双向链表模拟栈,一个栈进行基本操作,一个栈保存每次操作后的最小值。代码如下:class MinStack { Deque<Integer> mainPart = new LinkedList<>();//主体栈,负责栈的基本操作 Deque<Integer> minPar原创 2021-12-06 21:33:37 · 159 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除思路:由于栈有先进后出的特征,所以若要实现队列的先进先出需要利用一个保存新元素的栈和一个准备输出旧元素的栈,旧元素的栈由前一个栈出栈得到。其中,删除元素时需要从保存旧元素的栈中取元素,取完后再从保存新元素的栈中填充。 //由于栈有先进后出的特征,所以若要实现先进先出需要实现进(add栈)、出(add栈)原创 2021-12-06 20:48:01 · 146 阅读 · 0 评论 -
字符串(字母、数字排序)
/** * 题目要求:给定一个字符串,包含大小写字母、数字和问号,需要在不改变各类型位置的情况下, * 将字母按字典序排列,先大写后小写,数字按从大到小顺序排列。 */解决思路:对输入的字符串中的数字、大小写字母和问号进行统计,分别存储到不同的列表中,然后按照排序规则排序,最后通过指针操作遍历,从而替换原字符串非空格位的元素。时间复杂度o(n)。public static void main(String[] args) { //1.输入数据 //定义一个.原创 2021-10-10 19:48:01 · 2382 阅读 · 0 评论 -
Datawhale Task4-查找2(对撞指针)
1.前言本次查找2的主题是对撞指针,即双指针。以LeetCode的1.两数之和和15.三数之和为例。2.例子2.1 两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]思路原创 2020-08-28 23:27:18 · 121 阅读 · 0 评论 -
Datawhale Task3-查找1
1.二分查找二分查找:根据中间元素与目标值的大小关系将数组不断进行切分成两半,因为一个长为n的数组最多可以二分logn次,所以二分查找的时间复杂度为o(logn)。1.1例题-搜索插入位置给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。思路:计算中间元素的值比较中间元素和目标值的大小关系,若前者大,则搜索区间缩小到左半区间,若前者小,则缩小到右半区间。重复1,2过程直到中间元素和目标值相等原创 2020-08-25 23:42:51 · 101 阅读 · 0 评论 -
Datawhale Task2-动态规划-梳理总结
动态规划1.何方神圣2.大显神通的时机3.如何成功召唤4.打个怪兽4.1.暴力法代码运行结果4.1.动态规划代码运行结果输入检测5.总结6.参考内容1.何方神圣动态规划用于解决多阶段决策问题,从一个小规模问题出发,逐步得到大问题的解,并记录中间过程;记录中间过程称为“填表”,可能是一维表格,也可能是二维表格。2.大显神通的时机若要解一个问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。这时候就可以试试用动态规划了,相比朴素的暴力法省去了很多计算量,小技巧:举几个例子!!!原创 2020-08-22 18:19:03 · 124 阅读 · 0 评论 -
Datawhale Task1-分治算法-梳理总结
1.前言1.1主要思想分治算法的主要思想是将原问题递归地分成若干个子问题,直到子问题满足边界条件,停止递归。将子问题逐个击破(一般是同种方法),将已经解决的子问题合并,最后,算法会层层合并得到原问题的答案。用自己的话来说,就是将一个复杂的或者规模比较大的问题切分为一个个的小问题,不断重复这个过程,直到切分后的小问题瞄一眼就能解决了就退出递归,准备“出栈”。而出栈的过程需要不断解决一个个小问题,最终合并小问题的解来解出最开始的问题。1.2解题套路找到递归出口。一般是数组只有一个元素后不再往深递原创 2020-08-19 16:23:25 · 130 阅读 · 0 评论 -
缺失数字
一道简单的题,但是发现了各种有趣的算法。题目链接:https://leetcode-cn.com/problems/missing-number/ 题目如下:第一种算法(很普通,效率最低,将nums数组的数存储在list中,然后循环i从1到数组长度,查询list中不存在的i,即为结果),代码如下: int numsLen = nums.length; ...原创 2019-11-01 22:34:01 · 104 阅读 · 0 评论 -
汉明距离
趁着今日还有点时间,记下这道有趣的题,大家觉得有启发请给我点个赞,你们的鼓励是我坚持下去的动力。 今天的题链接:https://leetcode-cn.com/problems/hamming-distance/ 先贴上题目(属于lettcode上热题Hot100): 解法一:(我的解法)思路:第一步:将两个十进制数转换为二进制数的字符串,其中使用栈和除k商余法。...原创 2019-10-27 22:00:55 · 201 阅读 · 0 评论 -
有效的完全平方数
许久没写博客了,最近在刷lettcode,希望每天一道能坚持下去。 今天分享一个定理吧,也是一个判定有效的完全平方数的技巧,使用该技巧的代码感觉和自己写的代码运行效率有天壤之别。 客官,请坐,先看今天的题:链接:https://leetcode-cn.com/problems/valid-perfect-square给定一个正整数 num,编写一个函数,如果 num 是一个完全...原创 2019-10-10 18:57:18 · 509 阅读 · 0 评论