04 2022 档案
摘要:
因为正好有个一个作业 所以随便在博客上写写 代码:https://gitee.com/akyaky/vue-cross-domain-test 数据库篇 数据库没什么好说的 数据什么的自己加 用sql语句或者可视化工具都行 这里我用的是mysql+Navicat Premium的组合 具体 如下 即
阅读全文

摘要:
题目 题解 这题一开始想投机取巧结果走了弯路 浪费了不少时间.. 呜呜呜 看见这种类似于比较大小的 先排序再说 然后我们可以这样想 每一轮从candidates中挑出一个数(从小到大)出来 每一轮的加和 和target比较 以candidates = [2,3,5], target = 8 为例 1
阅读全文

摘要:
题目 38. 外观数列 给定一个正整数 n ,输出外观数列的第 n 项。 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列: - countAndSay(1) = "1" - countAndSay(n) 是对 coun
阅读全文

摘要:
题目 题解 在力扣 题目36-- 有效的数独中我们判断了一个数独是否有效, 那么这题我们只要让填入每一个数字后的数独表 也是有效的即可,那么我们就可以利用36题的思路 但是问题是填入的数字会影响其他数字的填入也会导致数独表是否有效, 所以我们需要回溯法 当无法填入数字(1-9在九宫格/行/列都有)时
阅读全文

摘要:
题目 题解 既然对行/列/九宫格有要求不能重复 那么我们把行/列/九宫格存放起来 然后判断是不是重复不就可以了。 先写三个容器 存放行/列/九宫格 1.字符放入 从上到下,从左往右 遍历(跳过. 具体遍历方法可以看代码) 先find一下看看原来的容器中有没有该字符 如果没有将遍历的字符放入三个容器(
阅读全文

摘要:
题目 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums = [1,3,5,6], target = 5 输出: 2 示例 2: 输入: nums
阅读全文

摘要:题目 题解 改造二分搜索 具体说明在代码注释 代码 1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 vector<int> ersearch(vector<int>& nums, int target, int lef
阅读全文
摘要:
题目 题解 这题其实直接做还是比较简单的 找到旋转点 判断一下二分查找即可 但是不满足进阶的条件 进阶:你可以设计一个时间复杂度为 O(log n) 的解决方案吗? 看到O(log n) 我们就能想到二分查找 但是二分查找是有序的才能使用 由于nums是部分有序 那么我们能不能拆一下呢?即 以中间位
阅读全文

摘要:
题目 题解 在第20题 力扣 题目20-- 有效的括号 我采用了栈的方法匹配 那么这题应该可以利用栈去匹配 但是这题并不是问的一共匹配了多少 而是连续最长匹配了多少 我们想一下 通过栈可以找到所有匹配的括号 那么剩下的不就是没有匹配的吗? 以()(()为例 先vector<int> vec(s.si
阅读全文

摘要:
题目 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 - 例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列
阅读全文

摘要:
题目 题解 暴力解法(思路来自评论区的老哥) 这里应该将题目中给的vector改为unordered_map容器然后去查找才能比较快捷 代码 1 #include<iostream> 2 #include<vector> 3 #include<string> 4 #include<unordered
阅读全文

摘要:
题目 题解 说实话这题如果没有边界 直接做的话肯定不难 但是就是难在最大和最小了 首先 我们是不是要根据两个数的符号考虑到几种情况再分呢?其实是不用的 我们可以转换某一种情况 然后只要最后返回的时候知道是正是负即可 那么最方便还是同符号吧 那么考虑一下都是正数? 但是 我们要知道INT_MIN 是不
阅读全文

摘要:
题目 题解 一开始 不匹配所以往右移动 这时匹配成功 双方同时移动 当然上面的位置要保留要用其他变量去移动(如果双方同时移动过程中有不匹配直接break即可 然后将needle恢复至0 haystack从红色箭头继续遍历) 本来应该这时就结束了 但是因为我写的判断成功就会向右移动 所以最后应该是 即
阅读全文

摘要:题目 题解 双指针 int left = 0; int right = nums.size()-1; 一开始 每次循环先从左边开始 for (; left < nums.size(); left++){} 先在右指针判断是否为Val 如果是Val 我们肯定就不能把这个值再给左指针了那就往左走 右指针
阅读全文
摘要:题目 题解 递归:(ps:感觉我用递归用魔怔了 什么都用递归) 以下面为例 初始全为0 然后将j向右移动 需要注意的是j每轮从c位置移动 一样的 不改变 继续向右移动 此时不一样了 我们就需要重新调用函数 将k更新至k+1 而c至为j 即 此时我们将c,j所在的值赋给k 然后继续重复上面步骤 向右移
阅读全文
摘要:
题目 题解 我们先想一下如果把整个链表翻转的应该怎么做? 是不是可以用栈去存放链表的每一个节点地址 如果再取顶即可 同理 我们可以把每k个节点当作一个链表 然后进行反转 然后连接他们 显而易见可以使用递归法 返回的就是每一个链表的头结点 然后用每一个链表的最后一个结点的next接收 这样所有的链表就
阅读全文

摘要:
题目 题解 递归法: 先考虑交互的代码 即 list1->next = list2->next; list2->next = list1; 再考虑 如果采用递归的话 每次返回什么? 可以看出 返回的肯定是 本次交换之后第一个节点 然后在上一次递归时用交换之后第二个节点->next 接收 这样就能把所
阅读全文

摘要:题目 23. 合并K个升序链表 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入:lists = [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3,4,4,5,6] 解释:链表数组如下: [ 1->4->5,
阅读全文
摘要:
题目 题解 1.递归/深度优先搜索/二叉树(思路来自 力扣评论区 ChengMing 老哥) 二叉树利用左括号和右括号数量进行递归 然后用一些条件剪枝 还是详细说明一下吧 1.设 n=2 然后画出二叉树(省略了一部分 n=2即有4个字符 所以有5层) 2.由于二叉树是从左开始走所以(反正右面也走不了
阅读全文

摘要:
题目 题解 1.迭代法 一开始都在头结点 由于1和1相等 我们取任意一个 然后把节点向右移动 我取了上面的1所以上面向右移动 此时 1 1与2比较 1小所以取1 然后下面向右移动 此时1->1 同理2与3比较 2小取2 此时1->1->2 .... 当一个链表已经被取完时 直接取另一个链表即可 都取
阅读全文

摘要:
题目 题解 方法1:删掉紧矮着的 比如{}{()} 先删成{()} ->{}->空 遍历没有()[]{}这三种情况时 判断一下是否为空即可 但是这样时间复杂度过高 方法2:栈 第一个右括号要与它之前的最后一个左括号匹配 第二个右括号要与它之前的倒数第二个左括号匹配 ..... 所以我们创建一个栈 把
阅读全文

摘要:题目 题解 方法1:暴力解法1 先遍历一遍链表 然后把链表里面的ListNode* 放入容器中(比如 Map,vector) 然后用容器当作数组去操作 方法2:暴力解法2 遍历一遍记录长度然后再次遍历 当遍历到第 L-n+1L−n+1 个节点时,它就是我们需要删除的节点,然后删除即可。 方法3:暴力
阅读全文
摘要:
题目 题解 思路:之前做过三数之和 ,那么我们能不能把四数转换成三数呢? 三数 nums[left] + nums[i] + nums[right]==0 四数(这里i我们可以在三数中多加一层循环从左到右 那么此时防止重复i应该从j+1开始 nums[j]也可能重复需要判断) nums[left]
阅读全文

摘要:
题目 题解 这题我们可以发现用四层循环(即循环第一个数字的字母然后里面套着第二个数字的字母 全部遍历然后输出)应该可以解决这个问题 但是既然是算法题还是中等我们应该另辟蹊径(好像可以用回溯算法 但是这里我这里采用了其他暴力?方法) 观察结果 输出:["ad","ae","af","bd","be",
阅读全文

摘要:
题目 题解 在上一题中采用了双指针的方法而这次也可以使用 但是左指针要指向i-1 右指针指向i+1 (先排序) 规则1 如果nums[left] + nums[right] + nums[i] > target 则说明left太大 向左移动 left = left - 1; 规则2 如果nums[l
阅读全文

摘要:
题目 题解 1.先排序 如果遍历一下如果没有正数和负数的临界点 说明只有正数或者只有负数 不可能有三个数加和等于 0,直接返回结果。2.对于重复元素:跳过,避免出现重复解3.令左指针 L=i+1,右指针 R=n-1,当 L<R 时,执行循环:当 nums[i]+nums[L]+nums[R]==0,
阅读全文

摘要:
题目 题解 1.先找到最短的那个字符 因为公共前缀最长的情况下就是最短的字符本身 2.用最短字符的长度从右往左遍历并与其他字符的相同位置比较(取子字符串用substr 比较用compare) 如果用完全匹配成功的保存一下,然后直接跳出循环即可,这样比起从左向右省下了不少时间 代码 #include<
阅读全文
