- 博客(17)
- 收藏
- 关注
原创 1447. 最简分数
题目描述 给你一个整数 n ,请你返回所有 0 到 1 之间(不包括 0 和 1)满足分母小于等于 n 的 最简 分数 。分数可以以 任意 顺序返回。 算法分析 最简函数是不能约分的函数,即分子和分母的最大公约数是1,因此我们使用__gcd判断最大公约数,使用两个循环遍历小于n的所有分子分母,有符合的push_back进去即可 参考代码 class Solution { public: vector<string> simplifiedFractions(int n) {
2022-02-10 14:39:42 194
原创 1405. 最长快乐字符串
题目描述 如果字符串中不含有任何 ‘aaa’,‘bbb’ 或 ‘ccc’ 这样的字符串作为子串,那么该字符串就是一个「快乐字符串」。 给你三个整数 a,b ,c,请你返回 任意一个 满足下列全部条件的字符串 s: s 是一个尽可能长的快乐字符串。 s 中 最多 有a 个字母 ‘a’、b 个字母 ‘b’、c 个字母 ‘c’ 。 s 中只含有 ‘a’、‘b’ 、‘c’ 三种字母。 如果不存在这样的字符串 s ,请返回一个空字符串 “”。 来源:力扣(LeetCode) 链接:https://leetcode-c
2022-02-07 19:49:15 144
原创 1688. 比赛中的配对次数
题目描述 给你一个整数 n ,表示比赛中的队伍数。比赛遵循一种独特的赛制: 如果当前队伍数是 偶数 ,那么每支队伍都会与另一支队伍配对。总共进行 n / 2 场比赛,且产生 n / 2 支队伍进入下一轮。 如果当前队伍数为 奇数 ,那么将会随机轮空并晋级一支队伍,其余的队伍配对。总共进行 (n - 1) / 2 场比赛,且产生 (n - 1) / 2 + 1 支队伍进入下一轮。 返回在比赛中进行的配对次数,直到决出获胜队伍为止。 来源:力扣(LeetCode) 链接:https://leetcode-cn.
2022-01-25 16:44:45 77
原创 496. 下一个更大元素 I
题目描述 给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。 请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。 nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/next-greater-element-i 著作权归领扣网络所有。商业转载请
2021-10-26 19:20:50 66
原创 492. 构造矩形
题目描述 题目分析 emmm参考力扣官方的说法吧,感觉自己写不太清楚 参考代码 class Solution: def constructRectangle(self, area: int) -> List[int]: w = int(sqrt(area)) while area % w: w -= 1 return [area // w, w] ...
2021-10-23 20:11:22 58
原创 66. 加一
题目描述 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/plus-one 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 题目分析 只需要从后往前遍历数组计算加一后的进位即可,需要考虑加一后位数变多的状况,特判一次即可 参考代码 class
2021-10-21 22:24:40 48
原创 1200. 最小绝对差
题目描述 给你个整数数组 arr,其中每个元素都 不相同。 请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。 示例 1: 输入:arr = [4,2,1,3] 输出:[[1,2],[2,3],[3,4]] 示例 2: 输入:arr = [1,3,6,10,15] 输出:[[1,3]] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/minimum-absolute-difference 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载
2021-10-19 21:04:06 58
原创 476. 数字的补数
题目描述 对整数的二进制表示取反(0 变 1 ,1 变 0)后,再转换为十进制表示,可以得到这个整数的补数。 例如,整数 5 的二进制表示是 “101” ,取反后得到 “010” ,再转回十进制表示得到补数 2 。 给你一个整数 num ,输出它的补数。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/number-complement 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 题目分析 由于题目给的数全为正数,因此补数只需
2021-10-18 18:50:14 81
原创 230. 二叉搜索树中第K小的元素
题目描述 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。 题目分析 利用二叉搜索树的性质进行分析,二叉搜索树的中序遍历即为这颗二叉搜索树的有序数列,因此我们直接对二叉搜索树进行中序遍历将其结果使用vector进行保存后输出第k-1位即可。 参考代码 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNo
2021-10-17 21:35:50 48
原创 7. 整数反转
题目描述 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 题目分析 从输入的int头开始进行处理,首先将第一位分离,乘以100 ,再处理第二位,乘以101,以此类推,并且将这些结果累加起来,为了解决如果在反转中超过32位的问题,在每次累加时进行判断是否大于INT_MAX / 10或者小于INT_MIN / 10 证明过程参考力扣
2021-10-16 20:39:45 54
原创 38. 外观数列
题目描述 题目分析 注意输入的限制 1<=n<=30,所以我们弄一个30的表格直接存起来就行了,然后输入n直接返回第n个 参考代码 class Solution: def countAndSay(self, n: int) -> str: arr = ["","1","11","21","1211","111221","312211","13112221","1113213211","31131211131221","13211311123113112211","
2021-10-15 15:36:24 66
原创 山峰数组的顶峰
题目描述 题目分析 比较容易想到O(n)的做法,即遍历一遍数组找最大值所在位置的方法,更快的方法应当使用二分法进行寻找,最快可在O(logn)的范围中找到。 使用l,r指针分别指向第一个和最后一个,mid指向中间 判断arr[mid]和arr[mid-1],arr[mid+1]的关系,如果arr[mid-1]>arr[mid],说明mid点不是山峰数组的最高点,最高点应当在mid点的左侧,此时让r=mid-1。反之亦然 当l-r==1时,也就是只剩下两个时,输出较大的,否则会错过。 参考代码 c
2021-10-14 22:02:09 217
原创 21. 合并两个有序链表
题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 题目分析 使用三个指针,p1作为l1的哨兵指针,p2作为l2的哨兵指针,比较p1和p2的值,将较小的值记录进pans所指示的链表之中。 参考代码 class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
2021-08-28 13:59:49 51
原创 86. 分隔链表
题目描述 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 样例 输入:head = [1,4,3,2,5,2], x = 3 输出:[1,2,2,4,3,5] 题目分析 可以使用两个链表一个small一个large,将大于x的存入large链表,小于x的存入small链表,再将small和large连起来 如图: 参考代码 class Solution { publi
2021-08-26 18:41:19 51
原创 61. 旋转链表
题目描述 算法分析 容易想到,先将其转换为循环链表再进行移位操作(过程如下图) 参考代码 class Solution { public: ListNode* rotateRight(ListNode* head, int k) { if(k == 0|| head==nullptr || head->next == nullptr) return head; ListNode* iter = head; int n=1; w
2021-08-25 14:35:38 47
原创 Leetcode-24 两两交换链表中的节点
题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 题目分析 1、此题要求将节点两两互换位置,考虑到题目给的链表为不带头节点的链表,这个可能会导致处理上面的麻烦; 2、本题处理上更换两个节点位置需要更改的有三个节点的值,假设需要更改node1和node2的位置则需要更改node1的前驱节点的next值,node1的next值以及node2的next值,同时需要注意改变顺序,防止出现链表断开; 3、处理顺序如下:设p指向nod
2021-08-24 17:22:16 94
原创 Leetcode-323 无向图中连通分量的数目
给定编号从 0 到 n-1 的 n 个节点和一个无向边列表(每条边都是一对节点),请编写一个函数来计算无向图中连通分量的数目。 示例 1: 输入: n = 5 和 edges = [[0, 1], [1, 2], [3, 4]] 0 3 | | 1 --- 2 4 输出: 2 示例 2: 输入: n = 5 和 edges = [[0, 1], [1, 2], [2, 3], [3, 4]] 0 ...
2021-08-24 16:22:35 591
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人