Cplusplus_leetcode
init_bin
路上…
展开
-
leetcode24: 反转链表(206)、存在重复元素(217)
1.反转链表反转一个单链表。思路:利用双指针,迭代的方式进行反转。注意对节点的临时存储/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {...原创 2020-02-04 13:37:09 · 137 阅读 · 0 评论 -
leetcode23:计数质数(204)、同构字符串(205)
1.计数质数统计所有小于非负整数n的质数的数量。思路:厄拉多塞筛法。如果当前数是质数,那么它的倍数就被筛选掉。class Solution {public: int countPrimes(int n) { int count =0; vector<bool>tt(n,true); for(int i=2;...原创 2020-02-03 16:03:04 · 165 阅读 · 0 评论 -
leetcode22: 快乐数(202)、移除链表元素(203)
1.快乐数编写一个算法来判断一个数是不是“快乐数”。一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。思路:使用快慢指针破循环。“快指针”每次走两步,“慢指针”每次走一步,当二者相等时,即为一个循环周期。此时,判断是不是因为1引起的循环,是...原创 2020-02-02 11:39:02 · 251 阅读 · 0 评论 -
leetcode21: 位1的个数(191)、打家劫舍(198)
1.位1的个数编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’的个数(也被称为汉明重量)。思路1:移动遍历所有位。1. 获取最后一位:n&1 2.判断结果为1则计数加1 3.右移一位: n>>=1class Solution {public: int hammingWeight(uint32_t n) { ...原创 2020-02-01 11:30:14 · 247 阅读 · 0 评论 -
leetcode20: 旋转数组(189)、颠倒二进制位(190)
1. 旋转数组给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。思路1:暴力遍历法------------超时class Solution {public: void rotate(vector<int>& nums, int k) { int pre, temp; for(int i=0;i<...原创 2020-01-30 23:02:15 · 201 阅读 · 0 评论 -
leetcode19: Excel表列序号(171)、阶乘后的零(172)
1.Excel表列序号给定一个Excel表格中的列名称,返回其相应的列序号。思路:遍历字符串,每个字符串减 ‘A’,加1,得到num。每遍历一位则让ans * 26 + num.(ans初始化为0)class Solution {public: int titleToNumber(string s) { int ans = 0; for...原创 2020-01-29 22:03:40 · 236 阅读 · 0 评论 -
leetcode18:Excel表列名称(168)、求众数(169)
1.Excel表列名称给定一个正整数,返回它在 Excel 表中相对应的列名称。例如, 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> AB ...思路:相当于26进制转换,只不过有一个坑是1-26,不是0-25。所以为了防止26变...原创 2019-11-21 16:15:24 · 309 阅读 · 0 评论 -
leetcode17:相交链表(160)、两数之和 II - 输入有序数组(167)
1.相交链表编写一个程序,找到两个单链表相交的起始节点。注意:如果两个链表没有交点,返回 null.在返回结果后,两个链表仍须保持原有的结构。可假定整个链表结构中没有循环。程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。思路:指针 pA 指向 A 链表,指针 pB 指向 B 链表,依次往后遍历,如果 pA 到了末尾,则 pA = headB 继续遍历,如果 pB 到了末...原创 2019-11-17 21:03:06 · 150 阅读 · 0 评论 -
leetcode16:只出现一次的数字(136)、环形链表(140)
1.只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?思路1:排序后双指针遍历实现。利用每个元素只出现两次,所以只要nums[i] !=nums[j]那么返回nums[i]。class Solution {public: int ...原创 2019-11-14 12:07:35 · 126 阅读 · 0 评论 -
leetcode15:验证回文串(125)、买卖股票的最佳时机 II(122)
1.验证回文串给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。思路:双指针法。1. 定义首尾指针,向中间判断。2. 跳过非字母个数字的字符。3.字母转化为小写字母进行判断,数字直接判断。class Solution {public: bool isPalindrome(string s)...原创 2019-11-11 11:37:23 · 112 阅读 · 0 评论 -
leetcode14: 杨辉三角 II(119)、 买卖股票的最佳时机(121)
1.杨辉三角 II给定一个非负索引k,其中k≤33,返回杨辉三角的第k行。思路:同杨辉三角那道题类似,只不过在是定义两个数组,一个用于记录当前值,一个用于存放上个值。外循环遍历行,内循环遍历个数。特别注意for的初始和结束条件。class Solution {public: vector<int> getRow(int rowIndex) {...原创 2019-11-09 22:41:06 · 173 阅读 · 0 评论 -
leetcode13:路径总和(112)、杨辉三角(118)
1.路径总和给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明:叶子节点是指没有子节点的节点。思路:递归遍历整棵树。如果当前节点不是叶子结点,则递归调用haspathnum函数,并用目标值减当前节点值。如果是叶子节点,判定当前节点值是否与更新的目标值相等,相等则返回true,否则false./** * Defin...原创 2019-11-07 14:52:09 · 280 阅读 · 0 评论 -
leetcode12:二叉树的层次遍历 II(107)、将有序数组转换为二叉搜索树(108)
1.二叉树的层次遍历 II给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)思路:利用队列存放树进行层次遍历(队列不断更新存储的是同一层节点)。while判断队列是否为空,在while里for循环遍历队列中包含的同一层,并根据左右子树更新队列。/** * Definition for a binary tree node...原创 2019-11-06 16:23:57 · 282 阅读 · 0 评论 -
leetcode11: 对称二叉树(101)、二叉树的最大深度(104)
1.对称二叉树给定一个二叉树,检查它是否是镜像对称的。思路:递归条件:1. 都为null返回true 2.一个不为null返回false 3. 对应的值不相等返回false递归过程:判断头节点左右子树(A,B)相等?判断A的右节点等于B的左节点? 判断A的左节点等于B的右节点?/** * Definition for a binary tree node....原创 2019-11-05 15:13:59 · 185 阅读 · 0 评论 -
leetcode10:合并两个有序数组(88)、相同的树(100)
1.合并两个有序数组给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。思路:双指针,从前往后。设置指针 len1 和 len2 分别指向...原创 2019-11-03 17:38:58 · 137 阅读 · 0 评论 -
leetcode9: 爬楼梯(70)、删除排序链表中的重复元素(83)
1.爬楼梯假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。思路:分析题意可知,第三层的上楼方法是(第一层)与(第二层)的和。p[i] = p[i-1]+p[i-2].所以只需要使用for循环更新即可。class Solution {public: int climbS...原创 2019-11-01 22:17:33 · 124 阅读 · 0 评论 -
leetcode8: 二进制求和(67)、 x 的平方根(69)
1.二进制求和给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字1和0。思路:补齐两个字符串,然后从后往前遍历。注意的是字符相加,其实内部就是对应的ascii码相加,所以我们可以将a[i] - '0' + b[i]的操作,实现得到对应位字符的相加结果。最前面一位是需要特殊处理的,for循环的条件得写对。class Solution {publ...原创 2019-10-31 23:21:14 · 239 阅读 · 0 评论 -
leetcode7: 最后一个单词的长度(58)、加一(66)
1.最后一个单词的长度给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0 。说明:一个单词是指由字母组成,但不包含任何空格的字符串。思路:从后往前遍历字符串,需要特别注意的就是比如这种情况“kk uu ” 最后含有空格的。需要先把空格去除掉,这里出示设定一个标志位为1,当从后往前遍历检测到一个非空字符时,设定标志位为0,只...原创 2019-10-30 23:10:38 · 137 阅读 · 0 评论 -
leetcode6: 报数(38)、最大子序和(53)
1.报数报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1. 12. 113. 214. 12115. 1112211 被读作 "one 1" ("一个一") , 即 11。11 被读作 "two 1s" ("两个一"), 即 21。21 被读作 "one 2", "one 1" ("一个二" ,...原创 2019-10-28 23:16:48 · 112 阅读 · 0 评论 -
leetcode5: 实现 strStr()(28)、搜索插入位置(35)
1.实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。思路:暴力遍历。从母串的第一个字符串开始遍历,到haystack.size-needle.size+1结束。class Solution {public: i...原创 2019-10-26 16:12:24 · 103 阅读 · 0 评论 -
leetcode4: 删除排序数组中的重复项(26)、移除元素(27)
1.删除排序数组中的重复项给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。思路:官方解法双指针法:放置两个指针 i和 j,其中 i是慢指针,而 j是快指针。只要 nums[i]=nums[j],我们就增加 j以跳过重复项。当我们遇到 num...原创 2019-10-25 23:25:48 · 158 阅读 · 0 评论 -
leetcode3: 有效的括号(20)、合并两个有序链表(21)
1. 有效的括号给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。思路:1. 左括号压栈。 2. 右括号则弹出栈中的左括号与其比较,如果栈为空或则两则不匹配都返回false. 3.利用哈希表存储左右括...原创 2019-10-24 21:50:38 · 149 阅读 · 0 评论 -
leetcode2: 罗马数字转整数(13)、最长公共前缀(14)
1. 罗马数字转整数罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000通常情况下,罗马数字中小的数字在...原创 2019-10-23 22:05:53 · 520 阅读 · 0 评论 -
leetcode1: 两数之和(1)、整数反转(7)、回文数(9)
1. 整数反转给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。示例思路:1.利用循环(数学方法)将每一位弹出,2.在压入新的变量中时进行溢出判断,3.将数字压入变量class Solution ...原创 2019-10-21 21:59:43 · 142 阅读 · 0 评论