![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
super尚
热爱学习的一枚研究僧
展开
-
统计数组中的字符C语言解法——剑指 Offer 50. 第一个只出现一次的字符
题目在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。示例 1:输入:s = “abaccdeff”输出:‘b’示例 2:输入:s = “”输出:’ ’限制:0 <= s 的长度 <= 50000解题思路字典查找法先用一个26个的数组,保存每个字符对应的数量,然后再去查哪个位置的字符数量是1就行了。变形一下就是加上大写,那也是一样的操作,只不过初始化的数组要大一些;还有就是要找任意一个字符只出现一次,那就更加简单了,只用在第二原创 2021-12-13 16:38:38 · 698 阅读 · 0 评论 -
迭代之“反转链表”——剑指 Offer 24. 反转链表
题目定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000解题思路从题目来看,就是将链表的指向反过来。迭代:利用三个额外空间节点,每次调整当前节点的指向。调整流程如下:1、用一个节点保存当前节点下一个节点的位置;2、将当前节点指向前一个结点;3、额外空间的前一原创 2021-12-06 10:11:55 · 667 阅读 · 0 评论 -
“双指针的巧妙”——剑指 Offer II 006. 排序数组中两个数字之和
解题思路如果没有排序,就只能一个个遍历,但在已经排序的情况下,可以通过首尾指针快速进行查找。并且一定存在,且只存在一个,这样就不用考虑边界情况,以及多个的情况。如果时有可能不存在的话,那么就不能用下面的while写法,应该改成i!=j,这样只要两者不相交就说明没有完全检测一遍。如果存在多个的话,就不懂了。。。。有想法的同学可以评论区交流一下~~代码class Solution { public int[] twoSum(int[] numbers, int target) {原创 2021-11-28 22:15:00 · 167 阅读 · 0 评论 -
力扣专题——剑指 Offer II 002. 二进制加法
题目给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。输入为 非空 字符串且只包含数字 1 和 0。示例示例 1:输入: a = “11”, b = “10”输出: “101”解题思路先将字符串转为字符,然后按位求和,将求和后的结果跟2取余,结果加到字符串中,进位的数下次继续加。然后移位两个字符串指针。最后将数据翻转,再toString。代码class Solution { public String addBinary(String a, Str原创 2021-10-29 18:48:22 · 108 阅读 · 0 评论 -
力扣专题——剑指 Offer II 003. 前 n 个数字二进制中 1 的个数
题目给定一个非负整数 n ,请计算 0 到 n 之间的每个数字的二进制表示中 1 的个数,并输出一个数组。解题思路主要用到了数学的方法,奇数和偶数的二进制中1的个数是有规律的。通过观察可以发现偶数A中1的个数与其除以2得到的数B的个数相同,这是因为这个偶数A相当于B左移一位得到的数,故相同。而比A大一个的数则比A多一个1,这是因为A是偶数,那么其二进制数最后一位为0,那么下一个数就是在这里加一。代码class Solution: def countBits(self, n: int) -&原创 2021-10-24 22:00:48 · 142 阅读 · 0 评论 -
输入n个整数,使用冒泡排序算法按从小到大排序,然后输出结果。
输入:第一行是1个整数n(n<100),表示随后有n个整数,第二行有n个整数,空格隔开。输出:输出一共为n-1行,每行为每趟排序的结果。代码:chang=int(input(""))num=input("")arr = [int(n) for n in num.split()]for i in range(chang-1): for j in range(1,chang): if arr[j-1]>arr[j]: arr[j -原创 2021-10-09 21:38:10 · 13366 阅读 · 0 评论 -
力扣专题——剑指 Offer II 001. 整数除法
题目:给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 ‘*’、除号 ‘/’ 以及求余符号 ‘%’ 。注意:整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231−1]。本题中,如果除法结果溢出,则返回 231 − 1解题思路除法最简单的思路就是一直减除数,直到减不动为止,减的次数就是商。当然前提要判原创 2021-09-24 20:45:16 · 277 阅读 · 0 评论 -
力扣专题——650. 只有两个键的键盘
寻找最小公因数最初记事本上只有一个字符 ‘A’ 。你每次可以对这个记事本进行两种操作:Copy All(复制全部):复制这个记事本中的所有字符(不允许仅复制部分字符)。Paste(粘贴):粘贴 上一次 复制的字符。给你一个数字 n ,你需要使用最少的操作次数,在记事本上输出 恰好 n 个 ‘A’ 。返回能够打印出 n 个 ‘A’ 的最少操作次数。示例 1:输入:3输出:3解释:最初, 只有一个字符 ‘A’。第 1 步, 使用 Copy All 操作。第 2 步, 使用 Paste 操作原创 2021-09-19 10:06:54 · 192 阅读 · 0 评论 -
面试题——递增间隔分割列表
题目:编写函数get_list,入参为一个列表L,将列表按照1、2、3、4…等递增间隔来进行分割,返回分割后的二维数组思路:由于添加的列表是一个不规则的,所以不能简单使用reshape来直接修改形状,这里使用append来添加到新的列表。具体操作就是:创建一个新的列表,每次append一个递增序列的小列表。具体处理方法就是使用一个idx来每次定位下一个要append的位置,使用varlen来进行append大小的调整。代码:# 给定列表listA = ['Sun', 'Mon原创 2021-09-06 16:31:28 · 608 阅读 · 4 评论 -
力扣专题——剑指 Offer 22. 链表中倒数第k个节点
剑指 Offer 22. 链表中倒数第k个节点输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.解题思路双指针,定义两个指针,一快一慢,想让快指针走k个位置,再让快慢指针同时前进,当原创 2021-09-02 16:20:20 · 130 阅读 · 0 评论 -
力扣专题——“11. 盛最多水的容器”
题目:盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。解题原创 2021-08-21 22:10:18 · 100 阅读 · 0 评论 -
力扣专题——“16. 最接近的三数之和”
题目:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。解题思路此题与15. 三数之和类似,解题方法也类似。都采用了一个循环里边加双指针的思想,不同之处在于,这里的三个数可能不是目标数字的和,而是最接近原创 2021-08-21 22:04:28 · 134 阅读 · 0 评论 -
力扣专题——15. 三数之和
15. 三数之和题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]提示:0 <= nums.length <= 3原创 2021-08-17 21:39:28 · 97 阅读 · 0 评论 -
力扣专题——169. 多数元素
题目:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:[3,2,3] 输出:3示例 2:输入:[2,2,1,1,1,2,2] 输出:2进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。解题思路投票法:根据题意可知。数组中众数的数量是大于其他数据之和的数量。所以众数的票数是一定大于其他所有票数之和。具体实现就在每一个原创 2021-06-20 22:00:32 · 109 阅读 · 0 评论 -
力扣专题——136. 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1] 输出: 1来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/single-number著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。前置知识:异或运算有以下三个性质:交换律:a ^ b ^ c <原创 2021-06-02 09:58:58 · 157 阅读 · 0 评论 -
力扣专题——14. 最长公共前缀——最长公共前缀C语言解法
题目:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。输入:strs = [“flower”,“flow”,“flight”]输出:“fl”解题思路拿第一个字符串当模板,然后从它第一个字符串开始跟后边所有的字符串的第一个字符串匹配,直到匹配到不符合的,那么结束遍历。那么将第一个字符串的当前位置赋值’\0’,表示字符串结束。 这样返回第一个字符串的话就可以将结束标志之前的字符串读出作为最长公共前缀。代码char * longestCommonPr原创 2021-05-17 22:54:01 · 1634 阅读 · 1 评论 -
力扣专题——264.丑数 II
264.丑数 II给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数 就是只包含质因数 2、3 和/或 5 的正整数。示例 1:输入:n = 10输出:12解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。思路:通过三指针写法来解决该问题。三个指针分别表示该位置乘以2,3,5使用min方法取其中最小的值添加到结果数组中然后将值相同的指针加一,这样可以避免数据重复整个流程也保证了最新添加的数的因数是2,3,5源码:py原创 2021-04-11 16:39:10 · 101 阅读 · 0 评论 -
232. 用栈实现队列
题目:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, siz原创 2021-03-05 21:57:33 · 79 阅读 · 0 评论 -
力扣专题——242. 有效的字母异位词
题目:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。思路:主要是找个计数数组来记录每个字母的数量具体思路:先判断两者长度,长度一样就可继续,否则返回false。然后将s中的每个字母的数量都保存在a数组中,然后遍历t数组,将t数组中含有的字母从a原创 2020-11-22 10:18:39 · 95 阅读 · 1 评论 -
力扣专题——147. 链表的插入排序
147. 对链表进行插入排序插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */str原创 2020-11-20 16:11:03 · 98 阅读 · 0 评论 -
力扣专题——1030.距离排序矩阵单元格
题目给出 R 行 C 列的矩阵,其中的单元格的整数坐标为 (r, c),满足 0 <= r < R 且 0 <= c < C。另外,我们在该矩阵中给出了一个坐标为 (r0, c0) 的单元格。返回矩阵中的所有单元格的坐标,并按到 (r0, c0) 的距离从最小到最大的顺序排,其中,两单元格(r1, c1) 和 (r2, c2) 之间的距离是曼哈顿距离,|r1 - r2| + |c1 - c2|。(你可以按任何满足此条件的顺序返回答案。)示例 1:输入:R = 1, C = 2原创 2020-11-17 21:41:56 · 75 阅读 · 0 评论 -
力扣专题——122. 买卖股票的最佳时机 II
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6原创 2020-11-08 18:41:36 · 649 阅读 · 0 评论 -
力扣专题——“139.单词拆分”
139-单词拆分给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。思路就是通过使用动态规划,用一个标记列表flag来标记是否匹配,这样前边匹配过的子序列就不用再次匹配了。flag[i]的意思是,从前边到当前位置的子序列是否匹配,匹配的话为True,否则为false因为初始化的时候除了第一个后边都设置为false 所以只有当子序列匹配的时候才会将相应位置的flag置为True这样当需要切换子序列查询的时候如果判断当前选原创 2020-11-01 21:09:41 · 134 阅读 · 0 评论 -
力扣专题——“岛屿的周长”
岛屿的周长解题思路遍历数组,每当遇到陆地(1)的时候,就去看看四周(四个方向),是否与水相邻,或者是否是边缘,是的话就将周长加一。代码int islandPerimeter(int** grid, int gridSize, int* gridColSize){ int res=0,m=gridSize,n=gridColSize[0]; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ i.原创 2020-10-30 15:53:14 · 138 阅读 · 0 评论