随笔分类 -  编程题-刷题 / 剑指Offer

摘要:第一想法是双指针,一个指针用于遍历,一个指针用于标记奇数和偶数的分界,而调整位置则通过交换来实现 思路来自于快排代码,分隔指针+交换,也算是双指针? vector<int> exchange(vector<int>& nums) { // 一个遍历指针,一个分隔指针,odd指向第一个偶数 int o 阅读全文
posted @ 2023-09-19 19:12 YaosGHC 阅读(3) 评论(0) 推荐(0) 编辑
摘要:思路 要求是从根节点开始的路径,这会比从任意节点开始的路径简单很多 思路是从根节点开始遍历每一条路径,如果和没有达到目标值就继续向下遍历 大于就回退,等于就返回到结果集中,可以看到这是一个回溯动作 实际过程中,首先不管是等于还是大于,回退pop()操作都要执行,这样才不会影响到后面 其次,这里要求必 阅读全文
posted @ 2023-09-19 18:54 YaosGHC 阅读(3) 评论(0) 推荐(0) 编辑
摘要:这种按照一定规则来验证字符串的题看起来很麻烦,想到另外一道类似的是验证 IP 地址 ……我觉得我理不清这个判断逻辑以及各个逻辑间的关系以控制逻辑 bool isNumber(string s) { // 首先这个字符串可能得样式为 // [若干可能的空格][[+/-][num./num.num/.n 阅读全文
posted @ 2023-09-09 15:15 YaosGHC 阅读(9) 评论(0) 推荐(0) 编辑
摘要:书上给出的第一个方法是用两个栈,将两个链表的节点依次入栈,然后出栈就相当于从后往前遍历了,这样只需要找到最后一个相同的链表节点 同样应该也可以使用内存栈,也就是递归来实现这一过程 第二种思路不需要额外的空间,而是先分别遍历两个链表得到链表的长度,然后让较长的链表指针将差值走掉,最后就可以同步遍历,第 阅读全文
posted @ 2023-09-05 14:58 YaosGHC 阅读(5) 评论(0) 推荐(0) 编辑
摘要:#### 二叉搜索树 ```cpp TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { // 如果p、q一定存在,那么root就一定不是空指针 TreeNode* traverse = root; wh 阅读全文
posted @ 2023-09-04 13:37 YaosGHC 阅读(6) 评论(0) 推荐(0) 编辑
摘要:打印出 n 个骰子所能扔出的所有点数的概率 ### 思路 dp[i][j] 表示 i 个骰子,投出 j 的概率 而概率 = 点数出现的次数 / 总次数 而 i 个骰子掷出 j 的次数 = i - 1 个骰子掷出 j- 1 的次数 + i - 1 个骰子掷出 j -2 的次数 + … + i - 1 阅读全文
posted @ 2023-08-24 22:10 YaosGHC 阅读(10) 评论(0) 推荐(0) 编辑
摘要:数组中除了两个数字,其他数字都出现了两次,找出这两个只出现了一次的数字 判断一个数字出现过没有,我们最常用的就是 set,set 中存在,那么就说明已经出现过了 但是这里要求空间复杂度`O(1)`,所以得换个思路 于是我想到了排序,将数组排序后相同的两个重复元素肯定是相邻的,这样我们只需要一次遍历就 阅读全文
posted @ 2023-08-24 00:10 YaosGHC 阅读(9) 评论(0) 推荐(0) 编辑
摘要:如果直接调用 sort API 然后要几个打印几个就没意思了,应该是和某个排序的内部过程结合 首先排除O(^N2^)的低效率排序算法,最先想到的其实是堆排序,小根堆,但是需要额外的空间 其次像快排、归并这样的也不合适…… 我想到了可以这样,快排第一轮划分之后,将部分舍去…… 应该就是这样了,堆排序或 阅读全文
posted @ 2023-08-19 20:23 YaosGHC 阅读(7) 评论(0) 推荐(0) 编辑
摘要:经典的选择题,但是这里要求用代码实现 我们可以根据 pop 结果去模拟这个过程,如果能够拟合,就是 true 什么情况下拟合成功? 两个指针都指向了数组末尾,同时栈空 太复杂了,条件能否简化一点? 什么时候拟合失败? pushed 指针指向末尾全部压入栈中,但是poped 数组指针卡住了,不匹配导致 阅读全文
posted @ 2023-08-17 15:28 YaosGHC 阅读(8) 评论(0) 推荐(0) 编辑
摘要:将 n 次相乘的幂运算转化为 log2N 次平方运算,并且采用**递归**算法 原书给出的==最优算法本身不处理负数,是外层函数处理的== ```cpp double myPow(double x, int n) { double res = pow(x, abs(n)); if (n > 1);/ 阅读全文
posted @ 2023-08-17 15:10 YaosGHC 阅读(7) 评论(0) 推荐(0) 编辑
摘要:可以使用栈,将每个单词(字符串)压栈,然后弹栈就 OK 了 好吧,实际写下来考虑到可能存在的多余空格问题,代码看起来并不简介,而且写之前就很明显直到需要最差额外 n 的空间,时间复杂度最差 2n,所以都不算好 思路是压栈的时候只压单词本身,弹栈的时候再去拼空格 ```c++ string rever 阅读全文
posted @ 2023-08-13 02:27 YaosGHC 阅读(11) 评论(0) 推荐(0) 编辑
摘要:双指针 ```c++ vector twoSum(vector& nums, int target) { // 题目中说了这是一个递增数组,而且我需要两个数字组成s vector res; int smallDigit = 0, bigDigit = nums.size() - 1; // 这要结果 阅读全文
posted @ 2023-08-11 11:01 YaosGHC 阅读(6) 评论(0) 推荐(0) 编辑
摘要:这题以前做过,和 力扣-3 重复 ```c++ int lengthOfLongestSubstring(string s) { // 本来应该是用map,但是其实可以使用数组替代,下标对应了字母 unordered_map map; int len = s.size(),maxLen=0;// 初 阅读全文
posted @ 2023-08-11 09:09 YaosGHC 阅读(10) 评论(0) 推荐(0) 编辑
摘要:### 读题 数字 0 ~ 25 分别对应了 a ~ z 一共 26 个字母 现在给一个数字,比如 12258,问可能对应多少种不同的翻译? 比如:1,2,2,5,8 12,2,5,8 12,25,8 1,22,5,8 1,2,25,8 一共 5 种 ### 思路 使用动态规划的三要素: 1. 数组 阅读全文
posted @ 2023-08-10 14:25 YaosGHC 阅读(13) 评论(0) 推荐(0) 编辑
摘要:判断是否为连续的数字,需要额外考虑的情况有一个,就是 0 可以代表任何数字,并且最多出现两次 给出的长度为 5 的数组不一定是顺序 ```C++ bool isStraight(vector& nums) { sort(nums.begin(), nums.end()); // 没有 0 的情况 i 阅读全文
posted @ 2023-08-08 22:10 YaosGHC 阅读(15) 评论(0) 推荐(0) 编辑
摘要:第一题是涉及到了 C++ 中的运算符重载 首先像是 Java、JS 这样的语言之中,是没有“运算符重载”这一概念的。对于运算符的行为,是由语言规范定义的,尽管我们还是能看到像 Java 中 String 类 “+” 操作,但是这也是预置的而不能自行重载。 我想这可能也是为什么 力扣 题单里面没有第一 阅读全文
posted @ 2023-07-09 15:46 YaosGHC 阅读(7) 评论(0) 推荐(0) 编辑
摘要:从左上角到右下角,每次只能向右或者向下移动,问路径总值最大是多少? 今天刚好让我撞见是每日一题,刚好又一眼知道怎么做 int maxValue(vector<vector<int>>& grid) { int m = grid.size(), n = grid[0].size(); // 二维dp, 阅读全文
posted @ 2023-03-08 21:50 YaosGHC 阅读(14) 评论(0) 推荐(0) 编辑
摘要:这不就,真是删除链表节点的基操 ListNode* deleteNode(ListNode* head, int val) { // 需要额外考虑的是删除 头节点、尾节点 的特殊情况 ListNode* virtual_head = new ListNode(); virtual_head->nex 阅读全文
posted @ 2023-02-22 16:40 YaosGHC 阅读(15) 评论(0) 推荐(0) 编辑
摘要:斐波那契数列 long long mod = 1e9 + 7; int fib(int n) { if (n < 2) return n; int prepre = 0, pre = 1, res; for (int i = 2; i <= n; i++) { res = (prepre % mod 阅读全文
posted @ 2023-02-16 05:09 YaosGHC 阅读(14) 评论(0) 推荐(0) 编辑
摘要:就是二叉树的层序遍历,我记得这题,~~用栈~~用队列,然后有个关键的size() Ⅰ vector<int> levelOrder(TreeNode* root) { vector<int> res; if (!root) return res; queue<TreeNode*> temp; tem 阅读全文
posted @ 2023-02-09 22:26 YaosGHC 阅读(16) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示
🚀
回顶
收起