- 博客(35)
- 收藏
- 关注
原创 ARTS Week 31
Algorithm本周的 LeetCode 题目为 380. O(1) 时间插入、删除和获取随机元素实现RandomizedSet类:RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false 。int getRandom()
2022-03-27 20:23:56
392
原创 ARTS Week 30
Algorithm本周的 LeetCode 题目为 162. 寻找峰值峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设 nums[-1] = nums[n] = -∞ 。你必须实现时间复杂度为 O(log n) 的算法来解决此问题。输入:nums = [1,2,3,1]输出:2解释:3 是峰值元素,你的函数应该返回其索引 2。因为题目要求算法复杂度是 O(log
2022-03-20 17:57:42
570
原创 ARTS Week 29
Algorithm本周的 LeetCode 题目为 334. 递增的三元子序列给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。输入:nums = [1,2,3,4,5]输出:true解释:任何 i < j < k 的三元组都满足题意本题可以使用贪
2022-03-15 16:30:07
8013
原创 ARTS Week 28
Algorithm本周的 LeetCode 题目为 347. 前 K 个高频元素给你一个整数数组 nums 和一个整数 k,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]先遍历一次数组,利用Map统计出各个元素的出现次数。而后将不同元素的出现次数作为排序的依据,维护一个大小为k的小顶堆,最后获取堆顶的元素即可。import java.util.SortedMap;class Solutio
2022-03-06 15:05:32
78
原创 ARTS Week 27
Algorithm本周的 LeetCode 题目为 328. 奇偶链表给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。首先分别奇数和偶数头节点,然后遍历链接,分别找出奇数节点子链表和偶数节点子链表,最后新建一个链表头,分别将奇数和偶数链表连接起来即可。输入: 1->2->3->
2022-02-27 17:56:19
89
原创 ARTS Week 26
Algorithm本周的 LeetCode 题目为 215. 数组中的第K个最大元素给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。输入: [3,2,1,5,6,4] 和 k = 2输出: 5第 K 个大的元素可以利用小顶堆进行查找,维护一个元素个数不超过 K 的小顶堆。遍历数组,若堆中元素个数小于K时,则将数组元素加入堆,并调整堆;若堆中元素个数为K时,若当前元素大于对于元素时,移除堆顶元
2022-02-20 19:57:05
95
原创 ARTS Week 25
Algorithm本周的 LeetCode 题目为 371. 两整数之和给你两个整数 a 和 b,不使用 运算符 + 和 -,计算并返回两整数之和。输入:a = 1, b = 2输出:3根据两个二进制位相加的四种情况如下:0 + 0 = 00 + 1 = 11 + 0 = 11 + 1 = 0 (进位)在不考虑进位的情况下,无进位加法结果为 a^b;而是否进位取决于 a&b,因此进位的结果为 (a&b)<<1。于是,我们可以将整数a和b的和,拆分为a和b的
2022-02-13 20:54:03
241
原创 ARTS Week 24
Algorithm本周的 LeetCode 题目为 69. Sqrt(x)给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。输入:x = 4输出:2可以使用二分法来进行处理,因为使用乘法进行判断可能会出现溢出,因此更好地处理策略是使用除法来进行计算。又最后的结果只需要保留整数部分,因此当 mid+1 > x / (mi
2022-02-06 21:37:18
954
原创 C语言读取写入CSV文件 [三] 进阶篇——读取CSV文件
本系列介绍了如何利用C语言读取写入CSV文件,本篇是系列的第三篇,介绍了利用C语言读取CSV文件的进阶内容,包括如何处理读取得到的数据、利用结构体保存数据、识别被包裹的字段、处理字段开头和结尾处的空格的制表符、应对其他分隔符、和介绍了现有的一个支持读取CSV的库。
2022-02-06 20:30:17
4165
2
原创 C语言读取写入CSV文件 [二]进阶篇——写入CSV文件
本系列介绍了如何利用C语言读取写入CSV文件,本篇是系列的第二篇,介绍了利用C语言写入CSV文件的进阶内容,包括包裹的概念、特殊符号的处理、如何处理开头和结尾处的空格、分隔符可能存在的问题以及最后介绍了可以使用软件进行配置
2022-02-06 20:30:11
2283
原创 C语言读取写入CSV文件 [一]基础篇
本系列介绍了如何利用C语言读取写入CSV文件,本篇是系列的第一篇,介绍了利用C语言读写CSV文件的基础内容。
2022-02-06 20:30:02
5326
1
原创 ARTS Week 23
Algorithm本周的 LeetCode 题目为 50. Pow(x, n)实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。输入:x = 2.00000, n = 10输出:1024.00000输入:x = 2.00000, n = -2输出:0.25000解释:2^-2 = (1/2)^2 = 1/4 = 0.25为了使用二分法,需要首先保证 n 永远为正值,故需要对x的n次方进行转换。首先对 n 进行判断,若 n < 0,xn等于 pow(1/x, -n
2022-01-30 21:50:14
608
原创 ARTS Week 22
Algorithm本周的 LeetCode 题目为 297. 二叉树的序列化与反序列化序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。提示: 输入输出格式与 LeetCode 目前使用的方式一致,详情
2022-01-23 19:30:48
82
原创 ARTS Week 21
Algorithm本周的 LeetCode 题目为 33. 搜索旋转排序数组整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标从0 开始计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [
2022-01-15 21:54:17
172
原创 ARTS Week 20
Algorithm本周的 LeetCode 题目为 56. 合并区间以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [start_i, end_i]。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].首先
2022-01-08 18:28:25
78
原创 ARTS Week 19
Algorithm本周的 LeetCode 题目为 5. 最长回文子串给你一个字符串 s,找到 s 中最长的回文子串。例如输入:s = “babad”,输出:“bab”本题使用动态规划进行解决,动态规划的核心就在于找到状态转移方程。通过观察发现,回文串去掉首尾两个字符后,依然是回文串,即 dp[i][j] = dp[i+1][j-1] ^ (s[i] == s[j]),再加上只有一个或两个字符时作为初始条件,因此状态转移方程为:dp[i][i] = true,dp[i][i+1] = (s[i]
2022-01-01 17:37:20
521
原创 ARTS Week 18
Algorithm本周的 LeetCode 题目为 55. 跳跃游戏给定一个非负整数数组 nums, 你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置
2021-12-25 20:52:28
82
原创 ARTS Week 17
Algorithm本周的 LeetCode 题目为 121. 买卖股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的
2021-12-18 21:15:26
75
原创 ARTS Week 16
Algorithm本周的 LeetCode 题目为:17. 电话号码的字母组合题目描述:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]本题采用回溯法,若符合条件则将该结果加入最后结果里,不符合条件则继续加入字符,重新调用函数,删除字符。通过的代码如下:class Soluti
2021-12-12 19:18:36
214
原创 ARTS Week 15
Algorithm本周的 LeetCode 题目为 22. 括号生成题目简介:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。有效括号组合需满足:左括号必须以正确的顺序闭合。输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]本题使用回溯法,因为有左右两边括号,可以使用 left,right 两个变量来分别记录左括号和右括号的次数。当左括号小于 n 时,可以加入左括号;当 right &l
2021-12-05 11:49:26
88
原创 ARTS Week 14
Algorithm本周的 LeetCode 题目为 200. 岛屿数量题目简介:给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。输入:grid = [ ["1","1","0","0","0"], ["1","1","0","0","0"], ["0","0","1","0","0"], ["0","0","0","1","1"
2021-11-27 18:22:04
78
原创 ARTS Week 13
Algorithm本周的 LeetCode 题目为:116. 填充每个节点的下一个右侧节点指针题目简介:给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next
2021-11-21 19:28:58
425
原创 ARTS Week 12
Algorithm本周的 LeetCode 题目为:160. 相交链表题目简介:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须保持其原始结构。示例如下:输入:A: 4->1-> 8->4->5B: 5->0->1->输出:8第一种思路就是使用集合 HashSet,
2021-11-14 19:58:47
198
原创 ARTS Week 11
Algorithm本周的 LeetCode 题目为 15. 三数之和题目简介:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]题目思路:先将数组从小到大进行排序,前两个数 first,second 可以从左端开始,第三个数 k,可以从后向前进行遍
2021-11-07 10:40:04
52
原创 ARTS Week 10
Algorithm本周的 LeetCode 题目为 88. 合并两个有序数组题目简介:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应
2021-10-31 21:00:22
50
原创 ARTS Week 9
Algorithm本周的 LeetCode 题目为:19. 删除链表的倒数第 N 个结点题目简介:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。**进阶:**你能尝试使用一趟扫描实现吗?示例:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]题目思路:一共有两种解法。第一种方法就是先遍历一次得到链表的长度,而后第二次遍历时就可以确定倒数第 N 个结点,进而进行移除。代码如下:class Solution { public ListNod
2021-10-24 18:56:06
66
原创 ARTS Week 8
Algorithm本周的 LeetCode 题目为 283. 移动零题目简介:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。要求:必须在原数组上操作,不能拷贝额外的数组,同时尽量减少操作次数。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]题目思路:数组最后的结果会是两部分,第一部分是非零数(按照原本位置顺序),第二部分全是零。因此可以设置两个指针,左指针和右指针,左指针左边都是非0数,左指针到右指针之间都是0。因此每次交换
2021-10-17 18:33:10
44
原创 ARTS Week 7
Algorithm本周的 LeetCode 题目为 237. 删除链表中的节点题目简介:请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为要被删除的节点 。输入:head = [4,5,1,9], node = 5输出:[4,1,9]题目思路:因为无法获取给定节点之前的节点,只能获取当前节点和它后面的节点。因此,我们可以将当前节点的值更改为其下个节点的值,而后删除其之后的节点。示例如下:head = 4->5->1->9, node = 5更新
2021-10-10 18:15:53
48
原创 ARTS Week 6
Algorithm本周的 LeetCode 题目为 7. 整数反转题目简介:给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231−2^{31}−231, 231−12^{31} − 1231−1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。假设环境不允许存储 64 位整数(有符号或无符号)。例如:x=123 时返回 321,x=-1230 时返回 -321。题目思路:题目关键要解决的地方在于需要
2021-10-03 12:35:11
52
原创 ARTS Week 5
Algorithm本周的 LeetCode 题目为 102. 二叉树的层次遍历题目简介:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例如下: 1 / \ 2 3/ /\4 5 6[[1],[2,3],[4,5,6]]题目思路:层次遍历的基本思路,使用一个队列记录当前层,然后遍历,记录节点的值和其左右孩子。一个需要注意的地方:在遍历前获取队列的长度(即该层的长度)。最终代码/** * Definition for
2021-09-26 20:25:37
55
原创 ARTS Week 4
Algorithm本周的 LeetCode 题目为 206. 反转链表题目简介:给定单链表的头节点 head ,请你反转链表,并返回反转后的链表。例如:head = [1,2,3,4,5],结果为[5,4,3,2,1]题目思路:简单地说,就是原来是 prev->curr,现在将其反过来变为 curr->prev 即可。最终代码:class Solution { public ListNode reverseList(ListNode head) { ListNo
2021-09-19 13:19:59
64
原创 ARTS Week 3
Algorithm本周的 LeetCode 题目为 8. 字符串转换整数 (atoi)题目简介:请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。具体的要求可访问上面的链接查看。题目思路:因为 int 可能会存在溢出,因此可以先用 long 变量储存结果,而后再判断有无溢出。字符串匹配规则如下:(可选)开始是空格可以自动跳过(可选)+/- 可以用来记录是否为正负数(必选)isDigit(ch) ==
2021-09-12 16:55:50
74
原创 ARTS Week 2
Algorithm本周的 LeetCode 题目为 1. 两数之和题目简介给定一个整数数组 nums 和一个整数目标值 target,找出该数组中和为目标值 target 的那两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。示例 :输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。题目思路题目的思路很简单,遍历数
2021-09-05 20:12:37
158
原创 ARTS Week 1
Algorithm本周的 LeetCode 题目为 189. 旋转数组题目简介给定一个数组,向右旋转 k 步,k 为非负数。示例如下:输入数组 [1,2,3,4,5,6,7], k = 3输出数组: [5,6,7,1,2,3,4]解释:旋转 1 步后得到: [7,1,2,3,4,5,6]旋转 2 步后得到: [6,7,1,2,3,4,5]旋转 3 步后得到: [5,6,7,1,2,3,4]解法一:自己的想法创建一个新数组用来存储结果。因为自己发现在旋转移动后 现nums[i] = 原
2021-08-29 19:21:18
67
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人