
leetcode
charon____
这个作者很懒,什么都没留下…
展开
-
[LeetCode]476. Number Complement
[LeetCode]476. Number Complement题目描述思路优化前 例如数字5,使用 5 ^ 7 得到结果2,获取7的方法, num ^ mask = result 对num右移一位循环,直到num >= 1,在循环中计算mask *= 2,外层对mask减一得到mask 最终得到result第一次优化 循环中使用 mask <<= 1 mask ^= 1替换乘法代码优化前原创 2017-02-27 21:35:43 · 3171 阅读 · 0 评论 -
[LeetCode]292. Nim Game
[LeetCode]292. Nim Game题目描述思路 数字n 结果 1 2 3 1 4 0 5 6 7 1 8 0 … … 4n+1 4n+2 4n+3 1 4n 0代码class Solution {public: bool canWinNim(int n) { if(n % 4) {原创 2017-02-27 22:15:34 · 3218 阅读 · 0 评论 -
[LeetCode]258. Add Digits
[LeetCode]258. Add Digits题目描述思路循环相加每一位 每次获取num的个位,加到和中,num = num / 10,循环直至num / 10为0,最后在外层sum += num, 对得到的sum进行判断,若大于等于10,递归处理 否则输出 详见代码代码class Solution {public: int addDigits(int num) {原创 2017-02-28 14:13:42 · 3405 阅读 · 0 评论 -
[LeetCode]231. Power of Two
[LeetCode]231. Power of Two题目描述思路对1移位,与给出数字的最高位对齐,然后异或,结果为0则返回true,否则false代码class Solution {public: bool isPowerOfTwo(int n) { int mask = 1; int condition = n; if (!conditi原创 2017-03-01 15:40:35 · 3215 阅读 · 0 评论 -
[LeetCode]412. Fizz Buzz
[LeetCode]412. Fizz Buzz题目思路水题,回忆一下vector用法代码class Solution {public: vector<string> fizzBuzz(int n) { vector<string>v; for (int i = 1; i <= n; i++){ string s;原创 2017-03-01 17:11:24 · 3188 阅读 · 0 评论 -
[LeetCode]419. Battleships in a Board
[LeetCode]419. Battleships in a Board题目描述思路题目中的合法输入,是必须有间隔,不能连续,可以理解为一个连通域问题,用广搜求解,但是不满足题目中的空间复杂度O(1)的要求 奇技淫巧:和合法输入有关 能作为一个合法输入的起点,那么他只能是顶点,或者这个点的左边一个点和上边一个点为空,具体代码如下BFS和GFS的解法留坑,明天补代码class Solution原创 2017-03-02 23:59:22 · 3099 阅读 · 0 评论 -
[LeetCode]434. Number of Segments in a String
[LeetCode]434. Number of Segments in a String题目描述思路和昨天的题目一个思路,计算合法的单词开头数目即可代码class Solution {public: int countSegments(string s) { int count = 0, len = s.length(); for (int i = 0;原创 2017-03-03 13:55:57 · 3165 阅读 · 0 评论 -
[LeetCode]447. Number of Boomerangs
[LeetCode]447. Number of Boomerangs题目描述思路穷举解法 学map和unordered_map 后者新增时,默认初始化为0代码class Solution {public: int numberOfBoomerangs(vector<pair<int, int>>& points) { int count = 0; fo原创 2017-03-03 16:08:15 · 3173 阅读 · 0 评论 -
[LeetCode]441. Arranging Coins
[LeetCode]441. Arranging Coins题目描述思路第一行堆叠1列 第二行堆叠2列 。。。 第n行堆叠n列 循环运算 对于0,返回0代码class Solution {public: int arrangeCoins(int n) { int count = 0; while (n >= count) {原创 2017-03-03 16:32:43 · 3103 阅读 · 0 评论 -
[LeetCode]409. Longest Palindrome
[LeetCode]409. Longest Palindrome题目描述思路统计字符重复出现次数,然后将重复出现次数除以2向下取整,结果乘2。计算所有重复字符的结果后和远字符串长度进行比较,若小于远字符串,将结果加1,回文串最中间的字符可以是一个单独出现的字符。代码class Solution {public: int longestPalindrome(string s) {原创 2017-03-04 11:10:57 · 3131 阅读 · 0 评论 -
[LeetCode]136. Single Number
[LeetCode]136. Single Number题目描述思路对于相同的数 异或结果是0 那么将数组中的数去异或结果,即为所求代码class Solution {public: int singleNumber(vector<int>& nums) { int res = 0; for (int p : nums) { res原创 2017-03-08 14:31:22 · 3046 阅读 · 0 评论 -
[LeetCode]448. Find All Numbers Disappeared in an Array
[LeetCode]448. Find All Numbers Disappeared in an Array题目描述思路使用map保存应该出现的数,然后遍历数组,把出现过的数在map中做标记,然后输入map中未被标记的数代码class Solution {public: vector<int> findDisappearedNumbers(vector<int>& nums) {原创 2017-03-08 15:16:22 · 3147 阅读 · 0 评论 -
[LeetCode]461.Hamming Distance
[LeetCode]461.Hamming Distance题目描述思路按照题目要求,最简单的思路是求异或,然后数异或结果的二进制表示中1的个数 异或简单,具体是数1的过程 答案的方法是 n&(n - 1) 从右向左一次数1 比如: xxxx10 减1后是 xxxx01 进行与操作之后是 xxxx00 最右面的1就消去了 循环计数直到n为0代码class Solution {原创 2017-03-04 22:52:53 · 3430 阅读 · 0 评论 -
[LeetCode]387. First Unique Character in a String
[LeetCode]387. First Unique Character in a String题目描述思路遍历,对于每个字符,找到第一个相同的字符就终止 找到第一满足条件的字符,终止循环代码class Solution {public: int firstUniqChar(string s) { int len = s.size(); int resu原创 2017-03-05 11:58:17 · 3239 阅读 · 0 评论 -
[LeetCode]500. Keyboard Row
[LeetCode]500. Keyboard Row题目描述思路将每一行的字符存入map中,不同行对应不同值, 遍历比较,有不同的就结束该词,全相同则加入result中代码class Solution {public: vector<string> findWords(vector<string>& words) { unordered_map<char, int> k原创 2017-03-05 21:38:48 · 3475 阅读 · 0 评论 -
[LeetCode]120. Triangle
[LeetCode]120. Triangle题目描述思路动归,新建一个状态保存数组 原数组 状态数组 2 2 3 4 5 6 6 5 7 11 10 13 4 1 8 3 15 11 18 16所以结果是11代码class Solution {public: int minimumTotal(vector<vector<int>>& triangl原创 2017-03-18 22:41:18 · 261 阅读 · 0 评论 -
[LeetCode]179. Largest Number
[LeetCode]179. Largest Number题目描述解题思路求最大的数,在数组中对于每一位数字数值越大应当越靠前,如:9 > 5,所以9应该在5之前 需要考虑的是对于不同位数的数之间的比较 9 < 35 ,但是9应该在35之前解决方法:比较两个数的顺序,将两个数当做字符串,拼接后进行字符串比较即可代码#define MAX 15bool cmp(const string& s1, c原创 2017-02-26 23:25:11 · 3237 阅读 · 0 评论 -
[LeetCode]169. Majority Element
[LeetCode]169. Majority Element题目描述思路遍历计数,返回大于n/2的值 update1 既然数的数目超过n/2,那数必然是中位数,排序之后去num[n/2] update2 分治算法,类似快排的思路,见代码代码class Solution {public: int majorityElement(vector<int>& nums) {原创 2017-03-05 22:40:28 · 3137 阅读 · 0 评论 -
[LeetCode]463. Island Perimeter
[LeetCode]463. Island Perimeter题目描述思路对于值为1的格子,判断边是否是周长的一部分,条件是,边是grid的边界或者相邻的格子值为0代码class Solution {public: int islandPerimeter(vector<vector<int>>& grid) { int row = grid.size(), col = gr原创 2017-03-06 14:05:54 · 3215 阅读 · 0 评论 -
[LeetCode]496. Next Greater Element I
[LeetCode]496. Next Greater Element I题目描述思路对每个数,遍历找到在目标数组中的位子,然后在位子之后找比他大的数,找到即寻找下一个数代码class Solution {public: vector<int> nextGreaterElement(vector<int>& findNums, vector<int>& nums) { ve原创 2017-03-06 15:38:20 · 3163 阅读 · 0 评论 -
[LeetCode]344. Reverse String
[LeetCode]344. Reverse String题目描述思路水题,栈代码class Solution {public: string reverseString(string s) { stack<char> rev; string result = ""; for (char &p : s){ rev.pu原创 2017-03-06 16:22:50 · 3138 阅读 · 0 评论 -
[LeetCode]485. Max Consecutive Ones
[LeetCode]485. Max Consecutive Ones题目描述思路遍历数组 如果为1,计数加 如果为0或数组最后一位,max更新,计数重置代码class Solution {public: int findMaxConsecutiveOnes(vector<int>& nums) { int max = 0, count = 0; for原创 2017-03-06 16:35:49 · 3875 阅读 · 0 评论 -
[LeetCode]9. Palindrome Number
[LeetCode]9. Palindrome Number题目描述思路1遍历一次,栈保存前1/2, 后1/2比较代码1// version 1bool isPalindrome(int x) { string num = std::to_string(x); stack<char> s; bool res = true; int len = num.size(),原创 2017-03-09 18:55:29 · 3054 阅读 · 0 评论 -
[LeetCode]389. Find the Difference
[LeetCode]389. Find the Difference题目描述思路1 使用map,将第一个字符串中出现的字母存储+1,之后遍历第二个字符串,对于每个字符,若map中有,则对应-1,若无,则返回该字符 2 位运算,异或, 相同的字符异或结果为0代码1.使用mapclass Solution {public: char findTheDifference(string s, s原创 2017-03-19 22:35:01 · 293 阅读 · 0 评论 -
[LeetCode]520. Detect Capital
[LeetCode]520. Detect Capital题目要求思路统计大小写数目,和单词数目比较,全大写或全小写,只有一个大写时检测是否首字母代码class Solution {public: bool detectCapitalUse(string word) { unordered_map<int, int> detect; for (char p原创 2017-03-06 19:45:34 · 3644 阅读 · 0 评论 -
[LeetCode]531. Lonely Pixel I
[LeetCode]531. Lonely Pixel I题目描述思路保存每一行的B的个数,然后计算值为B的点的行列B个数均为一的数目代码class Solution {public: int findLonelyPixel(vector<vector<char>>& picture) { unordered_map<int, int> row, col;原创 2017-03-06 21:14:36 · 4566 阅读 · 0 评论 -
[LeetCode]35. Search Insert Position
[LeetCode]35. Search Insert Position题目描述思路二分查找代码class Solution {public: int searchInsert(vector<int>& nums, int target) { int low = 0, high = nums.size() - 1; while (low <= high){原创 2017-03-06 22:17:05 · 3270 阅读 · 0 评论 -
[LeetCode]338. Counting Bits
[LeetCode]338. Counting Bits思路对于每一位数,计算其中1的个数,计算过程优化,可以使时间较短代码class Solution {public: vector<int> countBits(int num) { vector<int> res; for (int i = 0; i < num + 1; ++i) {原创 2017-03-10 19:58:10 · 3170 阅读 · 0 评论 -
[LeetCode]191. Number of 1 Bits
[LeetCode]191. Number of 1 Bits题目描述思路位操作,之前做过类似的代码class Solution {public: int hammingWeight(uint32_t n) { int res = 0; while (n){ res++; n &= n - 1;原创 2017-03-10 20:53:14 · 3631 阅读 · 0 评论 -
[LeetCode]442. Find All Duplicates in an Array
[LeetCode]442. Find All Duplicates in an Array题目描述思路出现数字的范围和数组长度一致,并且只重复出现两次,可以用位置标记,当这个位置被访问一次的时候,将位子上的数字置负,再次访问的时候,就将该表示该位置的数存入结果数组。代码class Solution {public: vector<int> findDuplicates(vector<in原创 2017-03-10 21:15:31 · 3230 阅读 · 0 评论 -
[LeetCode]226. Invert Binary Tree
[LeetCode]226. Invert Binary Tree题目描述思路广搜,对每个节点交换左右子节点代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int原创 2017-03-20 20:39:44 · 254 阅读 · 0 评论 -
[LeetCode]150. Evaluate Reverse Polish Notation
150. Evaluate Reverse Polish Notation题目描述思路遇到数字压栈,遇到运算符出栈运算,结果压栈 整体思路比较简单,看讨论区有设计到C++的函数式编程,留在这里记录一下代码class Solution {public: int evalRPN(vector<string>& tokens) { unordered_map<string, f原创 2017-03-20 21:21:00 · 275 阅读 · 0 评论 -
[LeetCode]492. Construct the Rectangle
[LeetCode]492. Construct the Rectangle题目描述思路对输入的数据取平方根,然后递减遍历,第一个满足整除条件的数即为目标代码class Solution {public: vector<int> constructRectangle(int area) { vector<int> res; int sq = sqrt(are原创 2017-03-20 21:35:53 · 256 阅读 · 0 评论 -
[LeetCode]167. Two Sum II - Input array is sorted
[LeetCode]167. Two Sum II - Input array is sorted题目描述思路开始的思路是暴力解,虽然用例都通过了,但是超时了 看了超时的用例,发现是太多重复造成的 于是加了重复检测的条件判断,提交通过之后发现速度太慢 换一种思路 两个指针从数组两边同时向中间移动,如果数字之和小于目标,则移动左指针,否则移动右指针代码注释部分为暴力解法#include <io原创 2017-03-27 23:33:10 · 353 阅读 · 0 评论 -
[LeetCode]506. Relative Ranks
[LeetCode]506. Relative Ranks题目描述思路用map保存 计算res的时候直接逆序遍历map即可代码#include <iostream>#include <string>#include <vector>#include <map>using namespace std;class Solution {public: vector<string> fin原创 2017-03-28 00:42:00 · 478 阅读 · 0 评论 -
[LeetCode]508. Most Frequent Subtree Sum
[LeetCode]508. Most Frequent Subtree Sum题目描述思路递归,保存每次的和到map中,同时计算和最多出现的次数 思路简单,回顾树的操作代码#include <iostream>#include <vector>#include <unordered_map>using namespace std; struct TreeNode { int v原创 2017-03-10 22:50:43 · 4003 阅读 · 3 评论 -
[LeetCode]2. Add Two Numbers
[LeetCode]2. Add Two Numbers题目描述思路考虑链表长度不同的情况 在循环时初始化val为0,当节点存在,进行赋值更新 初始化进位carry为0,每次更新carry 循环结束后,若carry不为0,则再新建节点,连接到链表上代码#include <iostream>using namespace std;struct ListNode { int val;原创 2017-04-06 22:11:13 · 492 阅读 · 0 评论 -
[LeetCode]268. Missing Number
[LeetCode]268. Missing Number题目描述思路因为只有0-n的数在数组中,所以只要对数组每一位指向的数字加标识即可 这里做的标识为取相反数,需要考虑0的情况代码#include <iostream>#include <vector>using namespace std;class Solution {public: int missingNumber(vect原创 2017-04-06 22:43:19 · 317 阅读 · 0 评论 -
[LeetCode]111. Minimum Depth of Binary Tree
[LeetCode]111. Minimum Depth of Binary Tree题目描述思路深搜,如果节点为空,返回0,如果节点一个子树为空,则返回非空子树的深度代码#include <iostream>#include <algorithm>using namespace std;struct TreeNode { int val; TreeNode *left;原创 2017-03-21 22:40:03 · 231 阅读 · 0 评论 -
[LeetCode]31. Next Permutation
[LeetCode]31. Next Permutation题目描述思路开始的思路:找到最靠右的 nums[i -1]小于nums[i],并在nums[i]的右边找出小于nums[i]并且大于nums[i - 1]的数,将此数与nums[i]交换,之后递归,这个思路会导致一些比较简单的情况无法出来 后续: 例: 数组 1 4 2 3 2 1 index 0原创 2017-03-12 12:03:00 · 2992 阅读 · 0 评论