LeetCode
yurio7r
ipy8pyp
展开
-
LeetCode 238. Product of Array Except Self
描述给出一个数组,求每个位置,不包含该数的乘积。要求复杂度为O(n)解决方法一先求出所有数的乘积,然后再做判断,主要有三种情况,0个0,1个0,大于等于2个0。(但是要用到除法,不知道为什么还是过了)。class Solution {public: vector<int> productExceptSelf(vector<int>& nums) { int lenth =原创 2016-07-09 22:33:38 · 263 阅读 · 0 评论 -
LeetCode 121. Best Time to Buy and Sell Stock
描述给出连续几天股票的波动,问可以获得的最大收益解决首先要知道,股票是要先买入,然后再卖出的。比较暴力的就是O(n^2)遍历啦,但是可以用O(n)的方法,在遍历的过程中记录到当前位置最小的值,然后做减法进行比较统计就可以了。class Solution {public: int maxProfit(vector<int>& prices) { int lenth = pri原创 2016-07-11 13:15:14 · 401 阅读 · 0 评论 -
LeetCode 223. Rectangle Area
描述给出两个矩形的对角顶点坐标,求出两个矩形的直线所购成的面积。解决判断两个矩形的位置关系,求出两个矩形的面积和,再用面积和减去两矩形的公共部分即可。class Solution {public: int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) { int h1 = min(D,原创 2016-07-22 16:02:23 · 350 阅读 · 0 评论 -
LeetCode 1. Two Sum
描述给出一个数组和一个目标值,求出数组中两个数的序列,使得这两个数加起来的和为目标值解决利用multimap存数组中值的位置,然后利用sort排序,从左到右遍历查找,利用lower_bound(),复杂度为O(nlgn).class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { v原创 2016-07-22 16:36:28 · 243 阅读 · 0 评论 -
LeetCode 326. Power of Three
描述判断一个数是不是3的幂解决利用对数的运算法则即可解决。开始的时候用以e为底的对数,结果WA了,换成以10为底的对数就过了。class Solution {public: bool isPowerOfThree(int n) { return (int)(log10(n) / log10(3)) == log10(n) / log10(3); }};原创 2016-07-24 16:11:29 · 239 阅读 · 0 评论 -
LeetCode 13. Roman to Integer
描述给出一个罗马数字,让你把它转换成正常的十进制数解决关键是要清楚罗马数字转换成10进制数的运算法则。当一个数比它右边的数大的时候,就加上这两个数;当一个数比它右边的数小的时候,加上右边的那个数减去当前数的差。 class Solution {public: int romanToInt(string s) { unordered_map<char, int> arr;原创 2016-07-24 16:28:58 · 291 阅读 · 0 评论 -
LeetCode 9. Palindrome Number
描述给出一个数字,判断它是否是回文。解决数学问题class Solution {public: bool isPalindrome(int x) { if (x < 0) return false; int tmp = x; int res = 0; while (x){ res原创 2016-07-25 18:11:52 · 257 阅读 · 0 评论 -
LeetCode 338. Counting Bits
描述给出一个数,求从0到这个数每个数包含有多少个2进制1.解决动态规划的思想。 状态定义:res[i]表示第i个数有多少个1。 状态转移方程: res[i] = res[i / 2] + (i & 1)class Solution {public: vector<int> countBits(int num) { vector<int> res(num + 1, 0)原创 2016-07-25 18:22:20 · 247 阅读 · 0 评论 -
LeetCode 371. Sum of Two Integers
问题求两个数的和,不能用“-”和“+”。解决方案用位运算求即可。class Solution {public: int getSum(int a, int b) { int ans; while (b){ ans = a ^ b; b = ((a & b) << 1); a = ans;原创 2016-07-04 12:35:38 · 442 阅读 · 0 评论 -
LeetCode 349. Intersection of Two Arrays && 350. Intersection of Two Arrays II
描述两道题目都是求交集,前者要求最后的结果集中只存在一个相同的值,后者要求尽结果集中应该有尽可能多的相同值(以共同值较少的数量为准)。解决349直接暴力遍历的,复杂度为O(n^2)。class Solution {public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { vector原创 2016-07-04 14:33:33 · 267 阅读 · 0 评论 -
LeetCode 342. Power of Four
描述判断一个数是否是4的幂解决循环判断即可。4msclass Solution {public: bool isPowerOfFour(int num) { int tmp(num); while (num >= 4){ if (num % 4 != 0){ return false;原创 2016-07-04 15:00:16 · 246 阅读 · 0 评论 -
LeetCode 292. Nim Game
描述给出一堆石子,每次取数1~3颗,最后取的人获胜,问获胜者是谁解决class Solution {public: bool canWinNim(int n) { if (n % 4){ return true; } return false; }};原创 2016-07-26 13:49:22 · 245 阅读 · 0 评论 -
LeetCode 26. Remove Duplicates from Sorted Array
描述给定一个有序数组,问互不相同的元素各有多少个,要求不能用额外的空间,结果数组中存在的结果都是不同的。解决两个索引,同时遍历,因为有序,直接可以通过大小比较得到结果。class Solution {public: int removeDuplicates(vector<int>& nums) { if (nums.empty()){ return原创 2016-07-05 13:47:52 · 231 阅读 · 0 评论 -
LeetCode 50. Pow(x, n)
描述实现pow这个函数解决利用快速幂,但是注意把右移改成 n /= 2。开始我一直用n >>= 1,但是一直超时,发现测试样例用到了最小的int整数-2147483648, 思考了觉得是,如果用 n>>= 1, 计算机会把负数转换成补码的形式,然后就会一直死循环。class Solution {public: double myPow(double x, int n) {原创 2016-07-27 13:35:12 · 309 阅读 · 0 评论 -
LeetCode 80. Remove Duplicates from Sorted Array II
描述给出一个数列,求出一个数列,使得其中重复元素的次数最多不超过2次,问这个数列的长度,并要求把该长度下的数存放在数列中。解决利用一个标志cnt,统计当前数在结果数列中出现的次数,遍历过去即可。O(n)class Solution {public: int removeDuplicates(vector<int>& nums) { int lenth = nums.size原创 2016-07-06 14:41:16 · 232 阅读 · 0 评论 -
LeetCode 347. Top K Frequent Elements
描述给出一个数组,就你求出出现次数最多的k个不同数字解决题目要求复杂度小于O(nlgn),如果用sort的话,最坏情况是O(n^2),利用堆就可以了,因为堆排序最差情况也是O(nlgn),而且对于堆,我们可以只存k个节点在堆中就好了。class Solution {public: vector<int> topKFrequent(vector<int>& nums, int k) {原创 2016-07-17 16:11:15 · 348 阅读 · 0 评论 -
LeetCode 283. Move Zeroes
描述给你一个数组,要求把所有的0移到末尾,其它数的相对顺序不变。解决方案一 拷贝到另一个数组存储;方案二,直接用当前数组存。class Solution {public: void moveZeroes(vector<int>& nums) { int lenth = nums.size(); if (lenth == 0){ re原创 2016-07-07 12:08:54 · 262 阅读 · 0 评论 -
LeetCode 268. Missing Number
描述给定一个长度为n的数列,数列中是不同的0~n的数,找出少掉的一个数解决先等差数列求和,然后O(n)遍历,即可。beat93%class Solution {public: int missingNumber(vector<int>& nums) { int lenth = nums.size(); int sum = lenth * (1 + lenth原创 2016-07-07 12:21:43 · 255 阅读 · 0 评论 -
LeetCode 2. Add Two Numbers
描述给出两个数,分别是用链表存储,求两个数之和。解决把这个题目当成数组来思考即可。当一个链表为空的时候,就需要new一个存储空间进行连接,注意进位的判断。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x)原创 2016-07-28 17:07:20 · 299 阅读 · 0 评论 -
LeetCode 3. Longest Substring Without Repeating Characters
描述给出一个字符串,求出不包含重复字符的最长字串解决从头至尾遍历,记录最长长度,利用map做标记。class Solution {public: int lengthOfLongestSubstring(string s) { map<char, int> cnt; int l = 0, r = 0; int max_lenth = 0;原创 2016-07-28 19:45:47 · 250 阅读 · 0 评论 -
LeetCode 162. Find Peak Element
描述给出一个数组,找出一个索引,使得在该索引位置的值大于它的相邻元素。解决方法一比较蠢的办法,就是从头到尾遍历了class Solution {public: int findPeakElement(vector<int>& nums) { int lenth = nums.size(); if (lenth <= 1) return原创 2016-07-18 20:51:06 · 398 阅读 · 0 评论 -
LeetCode 374. Guess Number Higher or Lower
描述给出一个数,让你猜这个数,有一个辅助函数guess()作判断,直接调用即可。解决二分判断。用 int m = (l + r) >> 1 就超时,然后换成了int m = l + (r - l) / 2 然后就过了// Forward declaration of guess API.// @param num, your guess// @return -1 if my number is原创 2016-07-19 13:51:54 · 308 阅读 · 0 评论 -
LeetCode 35. Search Insert Position
描述给出一个有序数组,然后再给出一个数,问你这个数应该在该数组中的哪个位置解决二分判断。 - 首先因为数组有序,那么如果该数大于最后一个数,即该数的位置应该在数组的最后,否则的话就二分判断 - 因为该数应该是存在于数组中,就寻找该数的位置,如果二分得到符合的值就直接返回,否则就判断最后退出的位置的值的大小,如果退出位置对应的数值大于该目标值,则说明该目标值的位置应该放在当前位置,否则答案应该是当原创 2016-07-19 20:03:12 · 350 阅读 · 0 评论 -
LeetCode 217. Contains Duplicate
描述给出一个数组,判断数组中是否有重复元素,若没有则返回false,有则返回true解决先排序,再O(n)遍历即可class Solution {public: bool containsDuplicate(vector<int>& nums) { int lenth = nums.size(); if (lenth == 0){ r原创 2016-07-09 11:19:07 · 307 阅读 · 0 评论 -
LeetCode 171. Excel Sheet Column Number
描述给出一个用26个英文组成的字符串,求它所代表的十进制数解决就是一个26进制的转换。class Solution {public: int titleToNumber(string s) { int lenth = s.size(); int res = 0; for (int i = 0; i < lenth; ++i){原创 2016-07-21 17:35:11 · 320 阅读 · 0 评论 -
LeetCode 168. Excel Sheet Column Title
描述给出一个10进制的数,求26进制的字符串解决因为题目中的A是从1开始的,所以注意操作数应为n-1,算法和十进制转换成2进制的操作是一样的。class Solution {public: string convertToTitle(int n) { string res; while (n != 0){ int tmp = (n -原创 2016-07-21 17:50:19 · 301 阅读 · 0 评论 -
LeetCode 242. Valid Anagram
描述给出两个字符串,判断这两个字符串是不是由相同数目的相同字符构成的解决方法一利用sort排序,然后再判断两个字符串是否相等。class Solution {public: bool isAnagram(string s, string t) { sort(s.begin(), s.end()); sort(t.begin(), t.end()); retur原创 2016-07-21 18:10:13 · 272 阅读 · 0 评论 -
LeetCode 122. Best Time to Buy and Sell Stock II
描述给出一支股票在每天的价格,求在允许多次交易的情况下可以获得的最大收益解决记录当前天的最小值,遇到比当前天价格高的就卖出,然后重新买入,买入之前先卖出。class Solution {public: int maxProfit(vector<int>& prices) { int lenth = prices.size(); int tmp = 0x3f3原创 2016-07-21 18:26:49 · 281 阅读 · 0 评论 -
LeetCode 7. Reverse Integer
描述给出一个数字,然后翻转。解决注意到可能会溢出class Solution {public: int reverse(int x) { long long res = 0; while (x){ res = res * 10 + (x % 10); x /= 10; } if (res <原创 2016-08-19 09:56:36 · 245 阅读 · 0 评论 -
LeetCode 8 String to Integer (atoi)
描述给出一个字符串,把它转换成整数解决坑点好多啊,看了题解才A掉的。判断是否有空格,判断字符的符号,还要考虑溢出,还有中间出现非数字字符要中断。class Solution {public: int myAtoi(string str) { int lenth = str.size(); long long res = 0; int i = 0原创 2016-08-19 11:11:03 · 340 阅读 · 0 评论 -
LeetCode 19. Remove Nth Node From End of List
描述给出一条链表,删除从右往左数的第n个节点解决因为不知懂啊ListNode是如何构成的,所以不考虑删除内存,只是修改了指针。先遍历一遍统计节点个数,然后再利用辅助指针来移动扫描节点的位置。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; *原创 2016-09-09 21:26:36 · 251 阅读 · 0 评论 -
LeetCode 20. Valid Parentheses
描述给出一组字符串,判断是否符合规则解决利用stack就解决了。class Solution {public: bool isValid(string s) { int lenth = s.size(); map<char, char> m; m.insert(make_pair('{', '}')); m.insert(ma原创 2016-09-10 14:07:45 · 223 阅读 · 0 评论 -
LeetCode 27. Remove Element
描述给出一个数组,移除数组懂值的大小等于val的值解决这种题目在leetcode中出现很多类似的,方法都一样。用辅助变量来标记位置即可。class Solution {public: int removeElement(vector<int>& nums, int val) { int lenth = nums.size(); int i = 0, j =原创 2016-09-10 14:33:35 · 245 阅读 · 0 评论 -
LeetCode 5. Longest Palindromic Substring
描述求一个字符串的最长回文子串解决利用manacher算法解决 class Solution {public: string longestPalindrome(string s) { string str = "$#"; int lenth = s.size(); for (int i = 0; i != lenth; ++i){原创 2016-08-08 21:10:27 · 245 阅读 · 0 评论 -
LeetCode 24. Swap Nodes in Pairs
描述给出一条链表,交换节点。解决利用三个节点prev, now, post进行节点的交换。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * };原创 2016-09-10 22:47:56 · 283 阅读 · 0 评论 -
LeetCode 83. Remove Duplicates from Sorted List
描述给出一条链表,删除重复的节点解决直接遍历/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {pub原创 2016-09-10 23:10:18 · 254 阅读 · 0 评论 -
LeetCode 58. Length of Last Word
描述给出字符串最后一个单词的长度解决从后向前扫描,扫描时遇到第一个字符开始计算。class Solution {public: int lengthOfLastWord(string s) { int pos = s.size() - 1; int cnt = 0; while (pos >= 0 && s[pos] == ' ')原创 2016-09-10 23:26:43 · 259 阅读 · 0 评论 -
LeetCode 66. Plus One
描述对一个vector数组加1.解决模拟class Solution {public:vector<int> plusOne(vector<int>& digits) { int lenth = digits.size(); vector<int> tmp(lenth + 1, 0); digits[lenth - 1] += 1; f原创 2016-09-11 21:58:19 · 260 阅读 · 0 评论 -
LeetCode 67. Add Binary
描述string类型的二进制数的加法解决模拟class Solution {public: string addBinary(string a, string b){ int posA = a.size(); int posB = b.size(); //string res = ""; int minLenth = (pos原创 2016-09-11 23:19:39 · 227 阅读 · 0 评论 -
LeetCode 70. Climbing Stairs
描述走梯子解决最简单的动态规划问题了class Solution {public: int climbStairs(int n) { vector<int> arr(n + 1); arr[1] = 1; arr[2] = 2; for (int i = 3; i <= n; ++i){ arr[i]原创 2016-09-12 13:54:40 · 256 阅读 · 0 评论