
LeetCode
evanoma
d-y-chp@live.cn
展开
-
K-diff Pairs in an Array
输入1个数组和差值k,要求输出差为k的整数对,且不能重复。例如Input: [3, 1, 4, 1, 5], k = 2Output: 2如果使用顺序容器,难以处理不能重复的要求。所以建议使用关联容器map和set,插入时不用考虑重复的问题。参考discuss的答案if (k < 0) return 0; unordered_set starters; unord原创 2017-03-27 16:41:48 · 215 阅读 · 0 评论 -
Find Mode in Binary Search Tree
返回二叉树中出现次数最多的元素,可能有多个开始想用堆栈对树进行中序遍历,存储在关联容器中,减少了运行所需的空间,但是会花费额外的时间确定最大出现次数的值。参考discuss,用递归的方式对树进行遍历,在最后用max函数逐级比较选择最大值返回vector findMode(TreeNode* root) { unordered_map map; vecto原创 2017-04-03 11:48:11 · 203 阅读 · 0 评论 -
Detect Capital
输入一个字符串,以下3种情况返回true:1.全部字符串全为大写字母;2.只有第一个为大写字母3.全部为小写字母其余返回falsebool detectCapitalUse(string word) { auto it = word.begin(); auto it1 = word.end(); if (isupper(*it)) {原创 2017-03-30 10:38:46 · 229 阅读 · 0 评论 -
Validate IP Address
现规定两种IP地址,分别为IPV4和IPV6。IPV4由4个10进制数(0~255)组成,只允许有单独的0出现,数字之间用“.”分隔;IPV6用8个16进制组成,每个数的长度最多不超过4,允许单独的0出现,数字之间用“:”分隔。Input: "172.16.254.1"Output: "IPv4"Explanation: This is a valid IPv4 address原创 2017-04-06 16:19:08 · 623 阅读 · 0 评论 -
动态规划
LeetCode70 可以1次爬1层或2层楼梯。问n层楼梯有几种爬法。 对于第n层楼梯有2种总的情况: 1.先爬到n-2层,然后1次爬2层 2.先爬到n-1层,然后1次爬1层 所以steps[n]=steps[n-1]+steps[n-2]. int climbStairs(int n) { vector<int> steps(n,0); steps[0]=1;原创 2018-03-09 10:09:03 · 181 阅读 · 0 评论 -
递归
LeetCode112 寻找一条从根节点到树节点的路径,要求之和为指定的数字。bool hasPathSum(TreeNode *root, int sum) { if (root == NULL) return false; if (root->val == sum && root->left == NULL && root->right == NULL) re原创 2018-03-09 10:38:19 · 141 阅读 · 0 评论 -
Leetcode560
统计数字序列中连续子列和为指定数字的个数 原来的想法为累积以后,从第二项开始逐级递减,但是复杂度比较高。所以该解法通过“nums[i] - k”:即如果得到的差等于之前的累加和,说明该和后面至此的序列之和为指定的数字。for (int i = 1; i < nums.size(); ++i) { nums[i] += nums[i - 1]; } unordered_原创 2018-03-01 10:10:12 · 279 阅读 · 0 评论 -
LeetCode137
给出1个数,最少用多少个自然数的平方相加而成int numSquares(int n) { while (n % 4 == 0) { n /= 4; cout << "n="<<n << endl; } if (n % 8 == 7) return 4; bool min2 = false; for原创 2018-03-02 16:39:32 · 183 阅读 · 0 评论 -
LeeetCode621
字母代表等待运行的任务。每2个相同任务之间需要有n个间隔。求运行所需的最短时间。分析后得出关键在于数量最多的任务。最终使用的公式是建立在n>0的基础上的。但是没有考虑到n=0的特殊情况。class Solution {public: int leastInterval(vector<char>& tasks, int n) { vector<int> cnt(26, 0);原创 2018-03-04 15:49:58 · 237 阅读 · 0 评论 -
LeetCode456
判断在一组数列中按从左到右的顺序,是否存在第3个元素小于第2个元素且大于第1个元素(132)在discuss中的简便方法class Solution {public: bool find132pattern(vector<int>& nums) { stack<int> stk;//存放可能的第3个元素 int s2 = INT_MIN;//第2个元素原创 2018-03-04 16:32:50 · 280 阅读 · 0 评论 -
Path Sum III
给定一个定值和一个二叉树,要求返回路径之和等于定值的条数,可以不从头节点开始struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} };参考discussclass Solution原创 2017-04-03 10:48:25 · 179 阅读 · 0 评论 -
Repeated Substring Pattern
输入1个字符串,试确定其是否能由子串重复而成Input: "abab"Output: Truebool repeatedSubstringPattern(string s) { auto size = s.size(); int condition = 1; for (decltype(size)sub = 1;sub < size;++sub)原创 2017-03-31 20:50:26 · 190 阅读 · 0 评论 -
Max Consecutive Ones
输入一串二进制代码,输出连续1个数最多的大小Input: [1,1,0,1,1,1]Output: 3注意在判断是否要更新最大值的时候,一定要将计数归0int longest=0,i=0;for (auto ix = nums.begin(); ix != nums.end(); ++ix) if(*ix==1) ++i; else {原创 2017-03-27 20:29:54 · 264 阅读 · 0 评论 -
Find All Numbers Disappeared in an Array
输入一个个数为n的数组,要求在不用额外空间的条件下找出在1~n中没有出现的元素。Input:[4,3,2,7,8,2,3,1]Output:[5,6]参考discuss,由于数组下标和数组内容只相差1,通过将数组内容变成负数的方法,则未出现元素作为下标对应的内容仍为正数int len = nums.size();for(int i=0; i<len; i++) {原创 2017-03-27 21:13:38 · 197 阅读 · 0 评论 -
Third Maximum Number
输入1个数组,输出第3大的元素,如果不存在输出最大值,重复出现的元素只计数1次。Input: [3, 2, 1]Output: 1参考discuss,关联容器set会自动按键值大小排好顺序,且不接收重复元素set top3;for (int num : nums) { top3.insert(num); if (top3.size() > 3)原创 2017-03-28 09:30:43 · 192 阅读 · 0 评论 -
Teemo Attacking
输入一个存储攻击时间的数组和攻击效果持续时间,要求输出攻击总的持续时间。注意不计算重复时间。int findPoisonedDuration(vector& timeSeries, int duration) { int time=0; decltype(timeSeries.size()) size=timeSeries.size(); if(原创 2017-03-28 19:37:20 · 258 阅读 · 0 评论 -
Find All Duplicates in an Array
输入1个数组内容在1~n之间原创 2017-03-28 20:35:30 · 177 阅读 · 0 评论 -
Reverse String II
给出1个字符串和k,每2k个反转前面k个元素;如果最后剩下/只有2k~k个元素依然反转前面k个元素;剩下/只有小于K个元素全部反转Input: s = "abcdefg", k = 2Output: "bacdfeg"如果使用迭代器的话,一旦超出范围就会报错,且无法用if进行判断。参考discuss用下标,只有在循环体内部对字符串进行访问,循环判断只用size_t的变量进行比原创 2017-03-29 20:35:59 · 283 阅读 · 0 评论 -
Complex Number Multiplication
以字符串的形式给出两个复数,输出两个复数的乘积用原创 2017-04-08 13:14:01 · 192 阅读 · 0 评论 -
Submission Details
给出一个二叉树,要求求出从树中任意一个节点到另一节点的最长路径的长度(长度是经过节点个数-1)。可能不经过跟节点 1 / \ 2 3 / \ 4 5 Return 3, which is the length of the path [4,2,1,3] or [5,2,1,3]本来想原创 2017-04-08 21:42:54 · 400 阅读 · 0 评论 -
Minimum Time Difference
给出多个用字符串表示的时间,需要找出时间差的最小值。先用快速排序对时间进行排序,避免浪费多余时间求不可能的时间差。求出相邻两个时间的时间差,同时比较选出最小值。#include #include #include using namespace std;void exchange(string &s1, string &s2);vector::size_原创 2017-04-09 16:50:06 · 179 阅读 · 0 评论