算法打卡
你的背影_
不患无位,患所以立;不患莫知己,求为可知也。
展开
-
算法打卡——leetcode剑指 Offer 22. 链表中倒数第k个节点
链表中倒数第k个节点方法一// 第一种方法,遍历两次 比如说要倒数第3个节点// 第一遍遍历,确定总个数,第二遍遍历 遍历到总节点个数 - 3 停止 并返回当前节点// 这里要注意的就是边界问题,// 如 一共10个节点 倒数第三个 其实是第8个节点,// 一共是n个节点,返回的应该是第n-2个节点// 从新开始遍历 就要从 head开始遍历 执行7次 head.next 即执行n-3次 head.next// 时间复杂度O(n) 空间复杂度O(1)fun getKt原创 2021-03-15 16:29:05 · 196 阅读 · 0 评论 -
算法打卡——leetcode剑指 Offer 18. 删除链表的节点
删除链表的节点时间复杂度:最好O(1) , 最坏O(n)空间复杂度:O(1)然后看了评论区里的标准答案,感觉,差不多原创 2021-03-15 14:27:23 · 196 阅读 · 0 评论 -
算法打卡——leetcode20. 有效的括号
有效的括号这个题一上来就觉得使用 先进后出的栈 做题比较好然后写出了如下代码大致思路是对的因为遍历了一遍字符串时间复杂度是O(n) 空间复杂度开辟了栈 也是 O(n)后来看了解题方法其实我的思路是正确的优化了一下代码结构,用了更少的代码解决问题查看了stack类和lindedlist类的区别首先这两个都是abstractlist的子孙类stack就是单纯的栈,push入栈 pop出栈 empty 判空 peek查看栈顶元素(不弹出)linkedlist典型的双向链表结原创 2021-03-12 14:47:48 · 200 阅读 · 0 评论 -
算法打卡——leetcode剑指 Offer 24. 反转链表 & 206. 反转链表
链表反转将近一个下午的时间都在研究这道题自己想了3种方法,后来看解题发现这么简单= = 还是得多多学习方法一:遍历将节点放入栈中然后 循环将栈中节点吐出时间复杂度O(n) 空间复杂度O(n)方法二:每一次获取到最后的节点,放到newhead后面时间复杂度O(n) 空间复杂度O(1)方法三:新建newhead然后第一次直接放到后面,然后都用插入法进行节点插入时间复杂度O(n) 空间复杂度O(1)方法四:双指针法,这个应该是最简单的最规范的写法原创 2021-03-11 17:37:35 · 141 阅读 · 0 评论 -
算法打卡——leetcode114. 二叉树展开为链表
前序遍历练习前序递归看解题的时候发现不对,array里直接房treenode就可以了。改了一下前序迭代自己想的暴力拼接都是遍历了所有的节点,所以时间复杂度都为O(n)原创 2021-03-10 17:21:20 · 101 阅读 · 0 评论 -
算法打卡——leetcode94. 二叉树的中序遍历
递归fun inorderTraversal1(root: TreeNode?): List<Int> { val l = ArrayList<Int>() inorder(root, l) return l}fun inorder(root: TreeNode?, l: ArrayList<Int>) { if (root == null) return inorder(root.left, l) l.add(r原创 2021-03-10 14:54:00 · 68 阅读 · 0 评论 -
算法打卡——leetcode11. 盛最多水的容器
11. 盛最多水的容器一看到题目穷举法不出所料,直接超时时间复杂度为O(n*n-1) = O(n^2)看到评论区里的方法大呼精辟模仿着写出来了我信了你的邪,看了下最快的,大家都是O(n)你最快,我最慢?继续优化,如果移动后比移动前的数值要小,其实没必要计算了,遂更改为一下代码自认为是能做到O(n)中,最快的了。以上...原创 2021-03-09 17:14:06 · 98 阅读 · 0 评论 -
算法打卡——leetcode1528. 重新排列字符串
https://leetcode-cn.com/problems/shuffle-string/看完题目,想起来学习的随机访问是数组最快为O(1),空间复杂度是O(n)所以这个题使用charArray随机访问放置每个char后转换成string即可原创 2021-03-09 14:04:40 · 87 阅读 · 0 评论 -
算法打卡——面试题 01.03. URL化
https://leetcode-cn.com/problems/string-to-url-lcci/拿到题,弄不清楚真实长度是什么意思,后来看了解题才明白,就是后面的字符串没用的意思。不太明白这个题是在考察什么。于是写下了下面的代码后来觉得这也太差了,看了大家的解体思路改成了下面的代码然后就思考这个题到底是想考察什么。那不能白做吧,那只能强行加戏了,来看看第一个为啥这么慢吧。String.substring(startIndex: Int, endIndex: Int): String原创 2021-03-09 11:26:55 · 119 阅读 · 0 评论