我的LeetCode
在刷leetcode中总结出的一些高效及优雅的算法思路。另外《剑指offer》、《编程之法》书中的一些我认为不错的算法思路也会进行总结,有助于加深理解以及以后快速解决一些新的算法问题。
李正浩大魔王
广州 佛山
展开
-
[Leetcode]反转字符串中的单词 III
题目 代码class Solution {public: string reverseWords(string s) { for(int i=0,j=0;j<=s.size();j++) { if(j==s.size()||s[j]==' ') { ...原创 2019-02-23 12:09:29 · 302 阅读 · 0 评论 -
[LeetCode]翻转字符串里的单词
题目 代码 class Solution {public: void reverseWords(string &s) { if (s.empty()) return; //-----判断是否不包含单词,全是空格 bool isSpace = true; for (auto i : s) { if (i != ...原创 2019-02-23 12:06:34 · 580 阅读 · 0 评论 -
[LeetCode]杨辉三角 II
题目 代码 class Solution {public: vector<int> getRow(int rowIndex) { vector<int> array(rowIndex+1); for(int i=0;i<=rowIndex;i++){ for (int j = i - ...原创 2019-02-23 10:23:54 · 273 阅读 · 0 评论 -
[LeetCode]长度最小的子数组
题目 代码 class Solution {public: int minSubArrayLen(int s, vector<int>& nums) { if(nums.empty()) return 0; int start=0,end=0,size=nums.size(),sum=nums...原创 2019-02-23 09:57:07 · 194 阅读 · 0 评论 -
[LeetCode]最大连续1的个数
题目 代码 class Solution {public: int findMaxConsecutiveOnes(vector<int>& nums) { int length=0; int maxLength=0; for(int i=0;i<nums.size();i++) ...原创 2019-02-23 09:14:03 · 354 阅读 · 0 评论 -
[LeetCode]移除元素
题目 代码 class Solution {public: int removeElement(vector<int>& nums, int val) { int i = 0, j = 0; while(j != nums.size()) { if(n...原创 2019-02-22 17:07:50 · 135 阅读 · 0 评论 -
[LeetCode]两数之和 II - 输入有序数组
题目 代码 class Solution {public: vector<int> twoSum(vector<int>& numbers, int target) { int start=0,end=numbers.size()-1; vector<int> result; ...原创 2019-02-22 15:25:53 · 306 阅读 · 0 评论 -
[LeetCode]数组拆分 I
题目 代码 class Solution {public: int arrayPairSum(vector<int>& nums) { std::sort(nums.begin(),nums.end()); int result=0; for(int i=0;i<nums.size();i+=...原创 2019-02-22 15:09:32 · 822 阅读 · 1 评论 -
[LeetCode]二进制求和
题目 代码class Solution {public: string addBinary(string a, string b) { int lenA = a.length(); int lenB = b.length(); string result; int addFlag = 0; int i; int current = 0; fo...原创 2019-02-22 12:25:38 · 258 阅读 · 0 评论 -
[LeetCode]对角线遍历
题目 代码class Solution {public: vector<int> findDiagonalOrder(vector<vector<int>>& matrix) { //判断是否为空 if(matrix.empty()) return {}; ...原创 2019-02-10 23:29:09 · 600 阅读 · 0 评论 -
[LeetCode]螺旋矩阵
题目 代码 class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { if (matrix.empty() || matrix[0].empty()) return {}; int heigh...原创 2019-02-10 22:49:53 · 9386 阅读 · 0 评论 -
[LeetCode]至少是其他数字两倍的最大数
题目 代码class Solution {public: int dominantIndex(vector<int>& nums) { vector<int> sortedNums=nums; std::sort(sortedNums.begin(),sortedNums.end()); ...原创 2019-02-10 21:47:58 · 365 阅读 · 0 评论 -
[Leetcode] 寻找数组的中心索引
题目 代码 class Solution {public: int pivotIndex(vector<int>& nums) { int right=0; for(auto i:nums) { right+=i; } int index...原创 2019-01-25 19:20:09 · 369 阅读 · 0 评论 -
[Leetcode]在排序数组中查找元素的第一个和最后一个位置
题目 代码class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { int begin=0,end=nums.size()-1; int mid; bool findTarget=fa...原创 2019-01-25 18:59:38 · 422 阅读 · 0 评论 -
[Leetcode]寻找峰值
题目 思路如果常规解法不考虑时间复杂度,直接遍历即可得到峰值,时间复杂度为O(n),题目要求O(logn),因此我们需要使用二分法。 首先考虑题目要求:nums[-1]=nums[n]=-∞,因此在数组开始必然存在一个上坡,在结尾必然存在一个下坡。这里给一个例子:[1,3,2,0],这里按照二分法一开始mid选的值为3,我们发现3大于2,因此有了一个下坡,而数...原创 2019-01-24 22:01:20 · 528 阅读 · 0 评论 -
[LeetCode]数组中的第K个最大元素
题目 代码class Solution {public: int findKthLargest(vector<int>& nums, int k) { std::map<int,int,std::greater<int>> times; for(auto i :nums) ...原创 2019-01-23 22:26:21 · 146 阅读 · 0 评论 -
461. 汉明距离
题目 代码class Solution {public: int hammingDistance(int x, int y) { int res=x^y; int num=1; int result=0; while(num!=0) { if((num&res...原创 2018-09-17 18:40:15 · 126 阅读 · 0 评论 -
190. 颠倒二进制位
题目 代码class Solution {public: uint32_t reverseBits(uint32_t n) { n=(n>>16)|(n<<16); n=((n&0xff00ff00)>>8)|((n&0x00ff00ff)<<8); n=((...原创 2018-09-17 18:43:11 · 247 阅读 · 0 评论 -
118. 杨辉三角
题目 代码class Solution {public: vector<vector<int>> generate(int numRows) { vector<vector<int>> res; if(numRows==0) return res; f...原创 2018-09-17 18:45:45 · 201 阅读 · 0 评论 -
20. 有效的括号
题目 代码class Solution {public: bool isValid(string s) { stack<char> sta; for(auto i:s) { switch(i) { case '[': ...原创 2018-09-17 18:47:11 · 115 阅读 · 0 评论 -
268. 缺失数字
题目 代码class Solution {public: int missingNumber(vector<int>& nums) { int result = nums.size(); for(int i=0;i<nums.size();i++){ result ^=...原创 2018-09-17 18:51:05 · 157 阅读 · 0 评论 -
15. 三数之和
题目 代码class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { //先固定住第一个数字,然后后面两个数字为 i+1和 nums.size()-1开始往中间缩小,并且要考虑数字重复的问题,时间复杂度为O(n²) ...原创 2018-09-17 18:54:44 · 544 阅读 · 0 评论 -
73. 矩阵置零
题目 代码class Solution {public: void setZeroes(vector<vector<int>>& matrix) { if(matrix.size()==0) return; int lastRow=-1,H=matrix.size(),W=matrix...原创 2018-09-17 18:58:38 · 309 阅读 · 0 评论 -
49. 字母异位词分组
题目 代码class Solution {public: vector<vector<string>> groupAnagrams(vector<string>& strs) { vector<vector<string>> res; unordered_map<s...原创 2018-09-17 21:11:27 · 122 阅读 · 0 评论 -
3. 无重复字符的最长子串
题目 代码class Solution {public: int lengthOfLongestSubstring(string s) { //用dic存储每个字符最后一次出现的位置 vector<int> dic(255,-1); int maxLength=0; //start表示当前第一个...原创 2018-09-17 21:13:21 · 153 阅读 · 0 评论 -
5. 最长回文子串
题目 代码class Solution {public: string longestPalindrome(string s) { if(s.size()==1) return s; string max=s.substr(0,1); int maxLength=0; for(int i...原创 2018-09-17 21:14:14 · 142 阅读 · 0 评论 -
88. 合并两个有序数组
题目 代码class Solution {public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int i=0; while(i<n) { nums1[m+i...原创 2018-09-16 08:12:51 · 150 阅读 · 0 评论 -
278. 第一个错误的版本
题目 代码// Forward declaration of isBadVersion API.bool isBadVersion(int version);class Solution {public: int firstBadVersion(int n) { int low=1,high=n; while(low<=hig...原创 2018-09-16 08:13:51 · 154 阅读 · 0 评论 -
70. 爬楼梯
题目 代码class Solution {public: int climbStairs(int n) { if(n==1) return 1; int step=0; int step1=1,step2=1; for(int i=1;i<n;i++) ...原创 2018-09-16 08:15:36 · 350 阅读 · 0 评论 -
121. 买卖股票的最佳时机
题目 代码class Solution {public: int maxProfit(vector<int>& prices) { if(prices.size()==0) return 0; vector<int> salarys(prices.size(),0); ...原创 2018-09-16 08:16:21 · 203 阅读 · 0 评论 -
53. 最大子序和
题目 代码class Solution {public: int maxSubArray(vector<int>& nums) { vector<int> max(nums.size(),0); if(nums.size()==0) return 0; max[0]=...原创 2018-09-16 08:17:30 · 136 阅读 · 0 评论 -
198. 打家劫舍
题目 代码class Solution {public: int rob(vector<int>& nums) { if(nums.size()==0) return 0; if(nums.size()==1) return nums[0]; if(num...原创 2018-09-16 08:18:12 · 186 阅读 · 0 评论 -
412. Fizz Buzz
题目 代码class Solution {public: vector<string> fizzBuzz(int n) { vector<string> res; for(int i=1;i<=n;i++) { if(i%3==0&&i%5==0) ...原创 2018-09-16 08:19:28 · 157 阅读 · 0 评论 -
204. 计数质数
题目 代码class Solution {public: int countPrimes(int n) { if(n<=2) return 0; int res=1; bool *prime = new bool[n+1]; for(int i=3;i<n;i++){...原创 2018-09-16 08:20:50 · 225 阅读 · 0 评论 -
326. 3的幂
题目 代码class Solution {public: bool isPowerOfThree(int n) { //3的19次方是3的倍数的最大值 //用换底公式 return n > 0 && (log(INT_MAX)/log(3)) % n == 0; }}; ...原创 2018-09-16 08:22:02 · 233 阅读 · 0 评论 -
217. 存在重复元素
题目 代码class Solution {public: bool containsDuplicate(vector<int>& nums) { std::map<int,int> dic; for(auto i:nums) { dic[i]++; }...原创 2018-09-13 10:57:02 · 144 阅读 · 0 评论 -
1. 两数之和
题目 代码class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> res; std::map<int,int> table; for(int i=0...原创 2018-09-13 15:34:32 · 154 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树
题目 代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {}...原创 2018-09-15 08:33:30 · 330 阅读 · 0 评论 -
102. 二叉树的层次遍历
题目 代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {}...原创 2018-09-15 08:31:38 · 231 阅读 · 0 评论 -
101. 对称二叉树
题目 代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {}...原创 2018-09-15 08:27:53 · 173 阅读 · 0 评论