自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 LeetCode_1021_ Complement of Base 10 Integer

求十进制数的反码通过观察可知,输入与输出的关系为:Input+Output=其中n为使Input+Output成立的最小m值class Solution {public: int bitwiseComplement(int N) { if(N<=1) return 1-N; int cnt=1; while(cnt<=N) cn...

2019-03-20 21:16:10 91

原创 LeetCode_821_Shortest Distance to a Character

求一个字符串中,每个位置到指定字符的最短距离我能想到的常规做法,即开辟一个专门的容器用于记录每个指定字符出现的位置。但需要对开始以及结尾的位置单独讨论,感觉这么做挺麻烦的考虑到题目数据范围:字符串长度在1~10000之间,这就意味着,返回的容器中,每个值都不会超过10000于是,在记录指定字符位置的容器的头尾分别插入-20000和30000的值,这样在遍历字符串时,只要单纯考虑当前位置...

2019-02-15 20:51:27 119

原创 Leetcode_268_Missing Number

考虑到题目要求只能用额外的常数空间,所以思路是:先计算这n+1个数字的总和,之后遍历数组,遇到一个数,就从总和中扣除,最后的差值就是缺失的数字了class Solution {public: int missingNumber(vector&lt;int&gt;&amp; nums) { int i,n=nums.size(); long sum; if(n...

2019-01-22 22:07:27 98

原创 LeetCode_777_Swap Adjacent in LR String

题目的意思是,若R的右边为X则R可以右移,若L的左边为X则L可以左移首先想到的是,把所有的X剔除后,若剩下的字符串相同,则表示可以转换为了检验这一猜想,考虑了两种极端的情况:1.XR和RX2.LX和XL这两种情况剔除X后相同,但却无法转换所以,有结论:当剔除了X后的字符串不仅要相同,而且在对应的字符中,START中的R应该比END中的R靠前,START中的L应该比END...

2019-01-09 21:17:22 140

原创 LeetCode_962_Maximum Width Ramp

主要思路是通过维护一个单调递减栈来实现,栈中存放元素对应的下标,分两步走:1.构造单调递减栈:从第一个元素开始遍历整个容器(其中第一个元素一定入栈),若栈顶对应的元素大于当前元素值,则将当前元素对应下标入栈这样做的道理是:假设栈顶有一个元素a,当前元素为b,若b&gt;a,则后续即使有一个元素c满足c&gt;b&amp;&amp;c&gt;a,可能出现最大的坡度也应该是c和a下标之差,而不...

2019-01-06 21:38:26 186

原创 LeetCode_134_Gas Station

首先,构造一个新的容器,其值为每个加油站的最大油量与到达下一个加油站的净剩值,同时再复制一遍添加到末尾(以方便处理环形的结构)接着,开始双重循环。第一重确定起始位置,第二重开始遍历一圈,如果发现累计的净剩值小于0,说明不能从该位置开始,跳出第二重循环class Solution {public: int canCompleteCircuit(vector&lt;int&gt...

2019-01-05 16:52:14 82

原创 LeetCode_202_Happy Number

需要有额外的空间来存储出现过的情况,防止有周期性的变化,从而发生死循环class Solution {public: int QuadraticSum(int n) { int ans=0; while(n&gt;0) { ans=ans+(n%10)*(n%10); n=n/10; } return ans; } bool isHappy(i...

2019-01-03 20:19:02 73

原创 LeetCode_162_Find Peak Element

强行双指针……class Solution {public: int findPeakElement(vector&lt;int&gt;&amp; nums) { int low=1,high=nums.size()-1; if(high==0 || high==-1) return high; if(nums[0]&gt;nums[1]) return 0...

2019-01-02 23:39:22 71

原创 LeetCode_160_Intersection of Two Linked Lists

求两个相交链表的交点1.第一个思路就是先用set存一个链表,在遍历第二条链表时,对每一个结点判断其是否在第一条链表中/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), ne...

2019-01-02 22:21:01 68

原创 LeetCode_135_ Candy

分糖果:本来只想分别分析每个孩子与相邻孩子之间的评分关系,遍历一次就求出结果,尝试了一下,放弃了,还是分成两步实现:1.从前往后遍历,若当前孩子评分大于前一个,则糖果数应比前一个多1——保证每个评分比前一个高的孩子分到的糖果数也多2.从后往前遍历,若当前孩子评分大于后一个,且后一个孩子的糖果数大于等于当前的孩子,则当前孩子的糖果数应+1——保证每个评分比后一个高的孩子分到的糖果数也多...

2019-01-01 20:10:49 81

原创 LeetCode_199_Binary Tree Right Side View

求二叉树的右视图右视图可等效为每个层次最右边的结点因此在层次遍历的代码基础上稍作修改即可/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) ...

2018-12-31 22:22:55 65

原创 LeetCode_91_Decode Ways

不同的解码方法:每一个非0的数字,都对应着相应的编码;同时,每两个数字之间也可能对应一种编码。因此本题有点类似于70题爬楼梯一样的递推关系:长度为n的码,对应解码方案数量=长度为n-1的+长度为n-2的。class Solution {public: int check(char c) {return (!isdigit(c)||c=='0')?0:1;} int check(char...

2018-12-31 19:26:28 80

原创 LeetCode_63_Unique Paths II

与62的区别在于,本题有障碍物开始,就想在62的基础上实现,认为将不考虑障碍的情况,减去经过障碍的情况即可,但提交时,提示解答错误,原因是,当有多个障碍时,可能有情况被多减了。下附错误的代码class Solution {public: int uniquePaths(int m, int n) { long long numerator=1,denominato...

2018-12-30 22:41:58 78

原创 LeetCode_62_Unique Paths

其实就是求组合数class Solution {public: int uniquePaths(int m, int n) { double numerator=1,denominator=1,times=min(m-1,n-1),i; for(i=0;i&lt;times;i++) { numerator=numerator*(m+n-2-i); ...

2018-12-30 20:47:22 94

原创 LeetCode_111_Minimum Depth of Binary Tree

求二叉树的最小深度思路还是一如继往的递归,但不能简单地像求最大深度一样,求左、右递归函数返回值的最小值因为这样简单地操作,可能会把只有一个孩子的结点当作叶结点来处理因此有必要进行分类讨论:1.当当前结点为空时,返回02.当当前结点为叶结点(左右孩子均为空)时,返回13.当当前结点只有左(右)孩子非空时,返回左(右)孩子的最小深度值+14.当当前结点左右孩子都有时,返回它...

2018-12-29 21:15:32 91

原创 LeetCode_102/107_Binary Tree Level Order Traversal

二叉树的层次遍历,与先/中/后序遍历不同,层次遍历更像是图的广度遍历,采用队列的结构来辅助实现102.从上到下的层次遍历/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * Tr...

2018-12-29 00:00:50 76

原创 Leetcode_101_Symmetric Tree

判断一棵二叉树是否对称,可以先将根结点除云,剩下的问题,就基本和判断两棵树是否相同类似了区别在于,判断相同的树时,是左子树与左子树比较,右子树与右子树比较,这里是左与右,右与左,同时在每次判断之前,要先判断好根结点是否为空下附解答1.递归版本/** * Definition for a binary tree node. * struct TreeNode { * ...

2018-12-28 13:27:31 65

原创 Leetcode_94_Binary Tree Inorder Traversal

一、见到树结构,最容易想到的就是递归/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NU...

2018-12-26 20:51:18 73

原创 LeetCode_61_Rotate List

思路:以空间换时间,先遍历一回链表,将每个结点都存入容器中,这样不仅可以做到随机访问第K个结点,也可以轻松知道该链表长度(因K可能大于这一长度值,所以这么做也为之后K对长度取模的操作打“铺垫”)同时要注意以下特殊情况1.首结点为空2.链表长度为13.K为0或正好等于链表长度的倍数以上情况直接返回首结点即可/** * Definition for singly-linke...

2018-12-24 23:51:27 71

原创 LeetCode_961_N-Repeated Element in Size 2N Array

根据题意,共有2N个数,其中不重复的有N+1个,重复的数字有N个由鸽巢原理可知,必然只有一个元素重复了所以只需要在遍历数组的过程中,若发现有数字出现过了,则重复N遍的数字就是它了用基于哈希的map结构来实现class Solution {public: int repeatedNTimes(vector&lt;int&gt;&amp; A) { map&...

2018-12-24 23:06:19 173

原创 LeetCode_54/59_螺旋矩阵

找到规律:每次循环分别遍历上、右、下、左四条边即可54.class Solution {public: vector&lt;int&gt; spiralOrder(vector&lt;vector&lt;int&gt;&gt;&amp; matrix) { int left=0,right,up=0,down,i; vector&lt;int&gt; ans...

2018-12-24 22:35:38 106

原创 LeetCode_73_Set Matrix Zeroes

思路较简单,对出现0的行或者列做好标记就好我突发奇想,看看 set的查找和一般数组的随机访问差别有多大……用set实现:class Solution {public: void setZeroes(vector&lt;vector&lt;int&gt;&gt;&amp; matrix) { int m,n,i,j; set&lt;int&gt; row,...

2018-12-24 21:00:20 72

原创 LeetCode_92/25/23_链表的有关操作

一、92.反转链表II思路即分别定位第m个和第n个结点(若不存在,则直接返回首结点),从m到n-1,摘下每一个结点,并插入到第n个结点之后/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) :...

2018-12-23 23:09:30 130

原创 LeetCode_100_Same Tree

(二叉)树的套路一般都是递归,先考虑根结点的情况,再考虑左、右子树的情况,分析子树时,也是如此根据此套路,现将本题分析如下:1.先考虑根结点的情况(要先排除根结点为空的情况,以防访问非法地址):(1)当有且仅有一个根结点为空时,返回false(2)当两个根结点均为空时,返回true(3)剩下的情况,就不存在根结点为空的情景了,访问根结点的值,若不相等,则返回false2.分...

2018-12-22 22:02:55 64

原创 Leetcode_45/55_Jump Game

一、45.Jump Game最开始的思想是最简单的,暴力将每一种情况都“遍历”一回,毫无疑问,超时了……(下为超时代码……)class Solution {public: int jump(vector&lt;int&gt;&amp; nums) { vector&lt;vector&lt;int&gt;&gt; jumps; vector&lt;int...

2018-12-22 21:02:01 84

原创 Leetcode_125_Valid Palindrome

验证回文数,本来挺简单的一道题,开始想玩一下栈结构,结果爆内存了下附爆内存代码:class Solution {public: bool isPalindrome(string s) { string LTR,RTL; stack&lt;char&gt; sk; int i,n=s.size(); if(s=="") return true;...

2018-12-22 11:39:16 80

原创 Leetcode_172_Factorial Trailing Zeroes

当出现一对2和5的因子时,阶乘结果的尾部就会多一个0而2的因子比5多,所以,因子5的个数,就是尾部0的个数class Solution {public: int trailingZeroes(int n) { int ans=0; while(n&gt;0) { ans=ans+n/5; n=n/5; } return ans; ...

2018-12-20 08:17:02 61

原创 Leetcode_168/171_Excel

这两道题类似于进制转化,但又有所不同,因为这套数字表达的体系没有0,这里被坑了一下……168.class Solution {public: string convertToTitle(int n) { int bit; string ans; while(n&gt;0) { bit=n%26; if(bit==0) ans='Z...

2018-12-19 23:47:51 47

原创 Leetcode_957_Prison Cells After N Days

由最后的提示“1 &lt;= N &lt;= 10^9”可知如果强行将每一个N取值的情况都求一遍,必然超时但乍一看,本题要想求得其中一项,必须求上一项,有递推公式的感觉所以,第一反应把希望放在从递推关系中求出“通项公式”或者存在周期性的规律进一步审题,从“cells.length == 8”,同时,“行中的第一个和最后一个房间无法有两个相邻的房间”可知,从N=1开始,头尾的值均为0,故...

2018-12-19 21:02:45 175

原创 Leetcode_31_Next Permutation

受这篇博客启发,并自己试着按字典顺序枚举1-5全排列,得出思路如下:1.从右往左遍历,找到第一个比后一个小的数2.从这个数开始,找到后面比它大又与它最接近的数,交换这两个数3.从交换的后一个位置开始,从小到大排序class Solution {public: void nextPermutation(vector&lt;int&gt;&amp; nums) { ...

2018-12-18 22:24:30 69

原创 Leetcode_17_Letter Combinations of a Phone Number

虽然本题说“给定一个仅包含数字 2-9 的字符串”,但还是要考虑所给串为空的情况......class Solution {public: vector&lt;string&gt; letterCombinations(string digits) { vector&lt;string&gt; ans; map&lt;char,string&gt; store;...

2018-12-18 21:07:34 79

原创 Leetcode_16_3Sum Closest

一、首先想到的思路,最简单暴力,设置三重循环搜索1.对原数组按从小到大进行排序2.将要返回的变量初始化为前三个数的和3.开始循环(1)若和更接近目标值,则更新要返回的变量(2)由于现在数组已经按照从小到大顺序排列了,可以做以下检测:i)若和已经等于目标值,则直接返回该数值ii)若和大于目标值,则可以跳出本层循环(在排序的数组中,和会随着遍历的过程增大,和小于目标值,继续...

2018-12-17 18:22:59 91

原创 Leetcode_43_Multiply Strings

思路同小学竖式计算的过程,有两种处理方式。class Solution {public: string multiply(string num1, string num2) { if (num1=="" || num2=="") return ""; if (num1=="0" || num2=="0") return "0"

2018-12-16 22:08:42 61

原创 Leetcode_15_3Sum

看题目的标题,和第一道Two Sum很像,实际上,也确实如此。与求高阶矩阵的降阶、高次方程的降次、多元方程的消元手段类似,本题在确定一个数字后,剩下的问题就和第一道几乎一样了。只是本题还需要注意,不能有重复的数字组合。由于题目并没有要求返回的每一组数字的顺序要按照原来相对位置,所以,为了方便,可以事先对数组进行排序,遍历时,检查一下和上一个元素是否相等。如果是,则直接跳过,否则开始取另外两...

2018-12-15 22:55:06 50

原创 Leetcode_49_Group Anagrams

一开始的设想是,设计一个这样的数据结构,它满足:1.分为主键和值两个部分2.主键可以充分、唯一地反映一个字符串的字母组合3.值即为原始的字符串本想设计一个函数,能做到输入为字符串,输出为主键,但后来嫌麻烦,就直接用有相同功效的map了class Solution {public: vector&lt;vector&lt;string&gt;&gt; groupAna...

2018-12-15 16:13:13 70

原创 Leetcode_33_ Search in Rotated Sorted Array

一、查找最简单的思路就是顺序查找,但是那样效率太低,提高一点,用双指针的方法class Solution {public: int search(vector&lt;int&gt;&amp; nums, int target) { int low=0,high=nums.size()-1; while(low&lt;=high) { if(nums[l...

2018-12-15 00:02:39 62

原创 Leetcode_32_Longest Valid Parentheses

思路一:1.和判断括号是否匹配相似,先遍历一回字符串,能匹配的先弹栈,不能匹配的先将下标压栈。此时,需要注意一个特殊情况:当字符串为空时,可直接返回0.2.再遍历一回栈,根据留在栈中的下标判断每一串匹配好的括号的长度,选择最长的一个即可。在此过程中,需要注意以下几个特殊情况:(1)栈为空:说明整个串均为有效的括号(2)栈底元素不为1:说明在串的开头存在有效括号,不要漏了...

2018-12-13 23:13:29 90

原创 Leetcode_48_Rotate Image

一、最快想到的思路:找规律,找出原坐标到新坐标的变化规律([x][y] --&gt; [y][n - 1 - x])即可。需注意的是,这种操作涉及到交换,但又不同于一般的两两交换——每次交换操作将涉及到四个点。所以,综上所述,可以将矩阵以每条边的中线为分割线,分成四块,以其中一块为基准进行变换。class Solution {public: void rotate(vector...

2018-12-11 22:02:22 52

原创 Leetcode_70_Climbing Stairs

爬楼梯问题:设n级台阶共有F(n)种走法,因为一次可以走1~2步,所以有F(n)=F(n-1)+F(n-2),故答案的规律与斐波那契数列(1,1,2,3……)有关,由组合数学关于求通项公式的理论可知,其通项公式为int climbStairs(int n) { double s=sqrt(5),x1=(1+sqrt(5))/2.0,x2=(1-sqrt(5))/2.0; r...

2018-12-09 23:41:20 73

原创 Leetcode_38_Count and Say

思路较简单,暴力遍历即可class Solution {public: string countAndSay(int n) { if(n==1) return "1"; string ans,record="1"; for(int i=1;i&lt;n;i++) { int len=record.size(); int cnt=0,nu...

2018-12-09 22:52:57 76

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除