- 博客(27)
- 收藏
- 关注
原创 UVA - 1590 IP Networks
比较繁琐的办法就是模拟。ip 地址可以用4个十进制数表示,对于每个十进制数,如果所有的 ip 地址中的该为都相等,说明它们已经处在同一个网络下。只有当某个十位数不等时,说明该位是应该改变的网络号。给定一组 ip 地址,求一个能够包含这组 ip 的子网。一个更好的方法是用位运算。
2023-06-19 21:16:56 144
原创 力扣T2418. 按身高排序 C
先创建一个结构体,包含两个元素:人的名字和身高。将原来分开的两个数组名字和身高存储到结构体数组,再对结构体按照身高的降序进行快排,存储名字返回即可。给你一个字符串数组 names ,和一个由 互不相同 的正整数组成的数组 heights。两个数组的长度均为 n。对于每个下标 i,names[i] 和 heights[i] 表示第 i 个人的名字和身高。请按身高 降序 顺序返回对应的名字数组 names。
2023-04-25 22:11:10 177
原创 力扣T11. 盛最多水的容器 C
给定一个长度为 n 的整数数组 height。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。初始指向左右端点,每次移动较小的一端,直到左右重合。返回容器可以储存的最大水量。说明:你不能倾斜容器。
2023-04-24 17:42:53 119
原创 力扣T41. 缺失的第一个正数 C
对数组进行遍历,对于遍历到的数 x,如果它在 [1,N] 的范围内,那么就将数组中的第 x−1 个位置打上标记。在遍历结束之后,如果所有的位置都被打上了标记,那么答案是 N+1,否则答案是最小的没有打上标记的位置加 1。针对排序,可以使用置换的方法,将给定的数组「恢复」成下面的形式:如果数组中包含 x∈[1,N],那么恢复后,数组的第 x−1 个元素为 x。哈希表,记录出现过的正整数,再找到没出现过的最小正整数。的形式,但其中有若干个位置上的数是错误的,每一个错误的位置就代表了一个缺失的正数。
2023-04-21 09:37:11 78
原创 力扣T26. 删除有序数组中的重复项 C
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。然后返回 nums 中唯一元素的个数。更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。数组是升序排列的,可设置一个快指针和一个慢指针,快的遍历整个数组,每当快指针指向的数与慢指针指向的数不同,就将快指针的数赋给慢指针。用一个数组标记当前位置的数是否出现过,没出现过就放到前面。
2023-04-20 11:51:59 140
原创 力扣T19. 删除链表的倒数第 N 个结点 C
顺序遍历整个链表,不妨设指针 p 代表当前找到的最后一个结点, t 代表 p 是链表中的第 t 个结点。当 t 等于 n 时,第一个结点就是当前倒数的第 n 个结点。此时令指针 q 指向头结点,同步移动 p,q 直到 p 为空,删掉 q 即可。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。
2023-04-19 07:55:13 56
原创 力扣T1026. 节点与其祖先之间的最大差值 C
从根开始进行 DFS。DFS 时记录路径上的最小值和最大值,每次进入下一个节点时,更新这两个值和这两个值的差值。(如果 A 的任何子节点之一为 B,或者 A 的任何子节点是 B 的祖先,那么我们认为 A 是 B 的祖先)节点 A 和 B 之间的最大值 V,其中 V = |A.val - B.val|,且 A 是 B 的祖先。给定二叉树的根节点 root,找出存在于。
2023-04-18 09:05:13 77
原创 力扣T2409. 统计共同度过的日子数 C
Alice 会在日期 arriveAlice 到 leaveAlice 之间在城市里(日期为闭区间),而 Bob 在日期 arriveBob 到 leaveBob 之间在城市里(日期为闭区间)。每个字符串都包含 5 个字符,格式为 "MM-DD" ,对应着一个日期的月和日。直接将 Alice 和 Bob 的到达日期和离开日期分别转化为一年中的第几天,再求差值。每个月份的天数分别为:[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]。
2023-04-17 09:02:22 162
原创 力扣T6. N 字形变换 C
两个特殊情况:1、行数只有一行。此时字符串无需改动,因为仍然是一行。2、字符串长度小于行数。此时整个字符串转化后排成一竖列,从上到下读与原字符串相同。注意到除了中间的斜线上的字符,其它列总是间隔相等的距离,即 2*numRows-2。再考虑中间多的即可。将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下。
2023-04-16 09:09:07 92
原创 力扣T35. 搜索插入位置 C
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。简单二分查找一下位置即可。注意一下当找到的位置为 0 和 数组长度 -1 时也是查找的终点。请必须使用时间复杂度为 O(log n) 的算法。
2023-04-15 09:04:59 78
原创 力扣T24. 两两交换链表中的节点 C
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。每次想要交换相邻的两个节点 P, Q ,需要三个节点的信息:R -> P -> Q。链表交换完成的条件是剩下 0 个或者 1 个节点。
2023-04-14 10:48:33 50
原创 力扣T1023. 驼峰式匹配 C
给定待查询列表 queries,和模式串 pattern,返回由布尔值组成的答案列表 answer。只有在待查项 queries[i] 与模式串 pattern 匹配时, answer[i] 才为 true,否则为 false。如果我们可以将小写字母插入模式串 pattern 得到待查询项 query,那么待查询项与给定模式串匹配。实际上就是在待查询字符串中查找子串 pattern ,同时要注意,因为只能插入小写字母,所以还要求待查询字符串中不存在多余的大写字母。
2023-04-14 09:22:30 71
原创 力扣T14. 最长公共前缀 C
横向扫描,即若当前最长公共前缀为空,则碰到的第一个字符串为最长公共前缀;否则对比最长公共前缀与当前字符串,确定新的最长公共前缀。编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串。
2023-04-13 18:48:41 58
原创 力扣T2404. 出现最频繁的偶数元素 C
由于数组中元素的大小范围为 0~1e5,可以用哈希的思路,新声明一个数组,用于记录对应偶数数字出现的次数。同时记录一个最大出现次数和对应数值,每次更新当前偶数出现次数时比较一下是否这个数字出现次数最多。如果存在多个满足条件的元素,只需要返回。如果不存在这样的元素,返回。,返回出现最频繁的偶数元素。
2023-04-13 18:35:10 185
原创 力扣T32. 最长有效括号 C
可以把一个能匹配的左右括号设定为价值 1,那么连续多个匹配的括号相当于有多个 1 的序列,于是问题就转化为,在 0,1 串中求最长不为 0 的子序列的长度问题。本质上还是以空间换取时间。转化为 0-1 串,"111111110",可求得最长不为 0 的子序列的长度为 8.的字符串,找出最长有效(格式正确且连续)括号子串的长度。给定字符串: "()((()))))"时间复杂度 O(n)空间复杂度 O(n)
2023-04-07 09:05:06 115
原创 力扣T34. 在排序数组中查找元素的第一个和最后一个位置 C
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。由于给出的数组是按照非递减排序的,同时题目要求时间复杂度为。很容易想到使用二分法来解决这个问题。你必须设计并实现时间复杂度为。
2023-04-06 11:10:42 54
原创 力扣T20. 有效的括号 C
一个简单栈的应用问题。遍历整个字符串,如果是左括号,则入栈;如果是右括号,看栈顶元素能否匹配,如能,则栈顶元素出栈,继续比较下一个元素,不能匹配则说明整个字符串无效。一个要注意的点是,遍历字符串之后,如果栈非空,也说明不能整个字符串无效。给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。每个右括号都有一个对应的相同类型的左括号。左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。
2023-04-06 10:34:58 47
原创 力扣T12. 整数转罗马数字 C
通常情况下,罗马数字中小的数字在大的数字的右边。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。例如, 罗马数字 2 写做 II ,即为两个并列的 1。因此,整数 num 的十进制表示中的每一个数字都是可以单独处理的。进一步地,我们可以计算出每个数字在每个位上的表示形式,整理成一张硬编码表。根据 num 每个位上的数字,在硬编码表中查找对应的罗马字符,并将结果拼接在一起,即为 num 对应的罗马数字。罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
2023-04-05 09:58:38 82
原创 力扣T13. 罗马数字转整数 C
对于左小右大的 4, 9, 40, 90, 400, 900 这六种情况,要么每次左边为 I, X, C 时先判断右边是不是比左边大,然后直接加上 4,9 等;要么每次碰到一个字符就直接加上对应数值,如果当前字符是 V, X, L, C, D, M,则判断左边是否是 I, X, C,再减去多加的。通常情况下,罗马数字中小的数字在大的数字的右边。I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
2023-04-05 09:23:00 44
原创 力扣T8. 字符串转换整数 (atoi) C
简单模拟,先去掉字符串中的所有前导空格,再将碰到的数字转化为整数。由于要求转化为 32 位整数,可以用 long long 类型暂存结果,如果超过了。请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。,说明它必然越界,返回对应的边界值。
2023-04-04 09:13:10 67
原创 力扣T5. 最长回文子串 C
枚举最长回文子串长度,在所有可能出现的位置上,查看当前长度的子串是否是回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。"aba" 同样是符合题意的答案。
2023-04-04 08:54:43 37
原创 力扣T9. 回文数 C
因此,可以只反转这个数的一半位数,如果反转后的结果与剩下没有反转的一半相等,说明这个数是回文数。类似于整数反转,要想知道一个数是否是回文数,需要将它与反转后的它进行比较。由于 x 是 32 位整数,可以用 long long 类型存储反转后的数,再比较二者是否相等。这里还需要考虑一点,如果一个回文数的位数是偶数,反转一半之后两边正好相等;给你一个 32 位整数 x ,如果 x 是一个回文整数,返回 true;,所以,当原始数字小于或等于反转后的数字时,就说明已经处理了一半位数的数字了。
2023-04-03 11:20:27 88
原创 力扣T7. 整数反转 C
一个最简单的想法,就是把给定的整数 x先进行反转,再检查是否仍在 32 位有符号整数范围内。32 位有符号整数的范围是 [-2147483648, 2147483647] ,如果一个数的位数小于 10 ,可以断定它反转后仍然处于 32 位有符号整数之内;如果它的位数等于 10,则与两端点值进行比较即可。给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [来源:力扣(LeetCode)
2023-04-03 10:46:58 110
原创 力扣T3. 无重复字符的最长子串 C
根据题目要求,子串中不能含有重复字符,此时先更新最长子串长度,再删去重复字符之前的字符。例如:对于字符串 "deabca" ,它的前5个字符组成的子串 “deabc” ,没有重复字符。而第 6 个位置,字符 ‘a' 再次出现了,此时需要将子串中的前三个字符 “dea” 删去,并将子串更新为 “bca”。不妨假设我们已经有了一个子串 ss ,那么对于当前位置 i 的一个字符 s[i] ,根据它是否在现在的最长子串中存在,有两种情况。因为无重复字符的最长子串是 "abc",所以其长度为 3。
2023-04-02 10:01:43 46
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人