
算法
wjh_init
一个正在编程之路上学习的菜鸟
展开
-
LeetCode旋转数组
旋转数组将包含 n 个元素的数组向右旋转 k 步。例如,如果 n = 7 , k = 3,给定数组 [1,2,3,4,5,6,7] ,向右旋转后的结果为 [5,6,7,1,2,3,4]。注意:尽可能找到更多的解决方案,这里最少有三种不同的方法解决这个问题。[显示提示]提示:要求空间复杂度为 O(1)解法一: 效率过低 void rotate(vector<int>& nums, int k原创 2018-04-24 23:18:54 · 218 阅读 · 0 评论 -
LeetCode颠倒整数
给定一个 32 位有符号整数,将整数中的数字进行反转。示例 1:输入: 123 输出: 321 示例 2:输入: -123 输出: -321 示例 3:输入: 120 输出: 21 注意:假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。解题思路:把没一位数字提取出来,在...原创 2018-05-11 14:19:08 · 146 阅读 · 0 评论 -
LeetCode字符串中的第一个唯一字符
字符串中的第一个唯一字符给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = “leetcode” 返回 0.s = “loveleetcode”, 返回 2.注意事项:您可以假定该字符串只包含小写字母。解题思路: 遍历字符串,由于只包含小写字符可以采用26*2的标志数组标识,0位标志下标,1位标志出现了多少次。 最后取...原创 2018-05-11 14:30:43 · 600 阅读 · 0 评论 -
LeetCode有效的字母异位词
有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。示例 1:输入: s = “anagram”, t = “nagaram” 输出: true 示例 2:输入: s = “rat”, t = “car” 输出: false 说明: 你可以假设字符串只包含小写字母。进阶: 如果输入字符串包含 unicode 字符怎么办...原创 2018-05-11 14:42:34 · 543 阅读 · 0 评论 -
LeetCode 验证回文字符串
验证回文字符串给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: “A man, a plan, a canal: Panama” 输出: true 示例 2:输入: “race a car” 输出: false解题思路: 数据清洗过后进行字符串奇偶判定,从左右正确位置分别...原创 2018-05-11 15:06:34 · 299 阅读 · 0 评论 -
LeetCode字符串转整数(atoi)
字符串转整数(atoi)实现 atoi,将字符串转为整数。在找到第一个非空字符之前,需要移除掉字符串中的空格字符。如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即为整数的值。如果第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。字符串可以在形成整数的字符后面包括多余的字符,这些字符可以被忽略,它们对于函数没有影响。...原创 2018-05-11 15:16:15 · 208 阅读 · 0 评论 -
LeetCode实现strStr()
实现strStr()实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll” 输出: 2 示例 2:输入: haystack = “aaa...原创 2018-05-11 15:50:36 · 630 阅读 · 0 评论 -
LeetCode最长公共前缀
最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,”flow”,”flight”] 输出: “fl” 示例 2:输入: [“dog”,”racecar”,”car”] 输出: “” 解释: 输入不存在公共前缀。 说明:所有输入只包含小写字母 a-z 。解题思路:一一比较即可...原创 2018-05-11 16:51:44 · 582 阅读 · 0 评论 -
LeetCode 删除链表的结点
删除链表的结点请编写一个函数,使其可以删除某个链表中给定的(非末尾的)节点,您将只被给予要求被删除的节点。比如:假设该链表为 1 -> 2 -> 3 -> 4 ,给定您的为该链表中值为 3 的第三个节点,那么在调用了您的函数之后,该链表则应变成 1 -> 2 -> 4 。解题思路:由于已经明确表示不是末尾的节点,所以可以采用删除给与节点的下一节点,删除之...原创 2018-05-15 23:58:23 · 1249 阅读 · 0 评论 -
LeetCode 反转字符串
反转字符串请编写一个函数,其功能是将输入的字符串反转过来。示例:输入:s = “hello” 返回:”olleh”解法一: 使用swap函数string reverseString(string s) { int length=s.length(); for(int i=0;i<length/2;++i) swa...原创 2018-05-11 14:03:53 · 430 阅读 · 0 评论 -
LeetCode合并两个有序数组
合并两个有序数组给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例:输入: nums1 = [1,2,3,0,0,0], m...原创 2018-05-11 09:05:37 · 1052 阅读 · 0 评论 -
LeetCode存在重复
存在重复给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数应该返回 true。如果每个元素都不相同,则返回 false。解法一: 效率不高bool containsDuplicate(vector<int>& nums) { if(nums.size()==0) return false; map<int,int>原创 2018-04-24 23:23:37 · 298 阅读 · 0 评论 -
LeetCode只出现一次的数字
只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1] 输出: 1 示例 2:输入: [4,1,2,1,2] 输出: 4解法一: 效率挺高 int singleNumber(vector<int>& nums) {原创 2018-04-24 23:31:19 · 446 阅读 · 0 评论 -
LeetCode两个数组的交集 II
两个数组的交集 II给定两个数组,写一个方法来计算它们的交集。例如: 给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].注意:输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。 我们可以不考虑输出结果的顺序。 跟进:如果给定的数组已经排好序呢?你将如何优化你的算法? 如果 nums1 的大小比 nums2 小很多,哪种原创 2018-04-24 23:38:35 · 303 阅读 · 0 评论 -
LeetCode加一
加一给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。 示例 2:输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321。解法一:原创 2018-04-24 23:45:12 · 296 阅读 · 0 评论 -
LeetCode移动零
移动零给定一个数组 nums, 编写一个函数将所有 0 移动到它的末尾,同时保持非零元素的相对顺序。例如, 定义 nums = [0, 1, 0, 3, 12],调用函数之后, nums 应为 [1, 3, 12, 0, 0]。注意事项:1.必须在原数组上操作,不要为一个新数组分配额外空间。 2.尽量减少操作总数。解法一: 效率较低 void moveZeroes(vector<int>& nu原创 2018-04-24 23:49:59 · 235 阅读 · 0 评论 -
LeetCode两数之和
两数之和给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]解法一: 其实效率已经挺高了 vector<int> twoSum(vector<int>& nums原创 2018-04-24 23:55:25 · 130 阅读 · 0 评论 -
LeetCode有效的数独
有效的数独判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。1.数字 1-9 在每一行只能出现一次。 2.数字 1-9 在每一列只能出现一次。 3.数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用 ‘.’ 表示。示例 1:输入: [ [“5”,”3”,”.”,”.”,”原创 2018-04-25 00:15:48 · 1551 阅读 · 0 评论 -
LeetCode旋转图像
旋转图像给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ],原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3]原创 2018-04-25 00:18:09 · 404 阅读 · 0 评论 -
LeetCode 删除链表的倒数第N个节点
删除链表的倒数第N个节点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?解法一:遍历一遍并储存下所有节点的指针,...原创 2018-05-16 00:04:25 · 673 阅读 · 0 评论