
LeetCodeView
云水谣CS
这个作者很懒,什么都没留下…
展开
-
283. Move Zeroes
将数组中的非零元素移动到所有零元素前面:采用双指针移动法,指针i遍历数组,指针j指向零元素位置class Solution {public: void moveZeroes(vector<int>& nums) { for(int i=0,j=0;i<nums.size();i++) { if(num...原创 2018-03-16 18:43:25 · 112 阅读 · 0 评论 -
【sort】56. Merge Intervals
与该题同理的有57. Insert Interval:/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s, int e) : start(s)...原创 2018-05-06 17:34:20 · 107 阅读 · 0 评论 -
38. Count and Say
1. 12. 1中由于有一个1,故2表示为113.2中由于有二个1,故3表示为214.3中由于有一个2,一个1,故4表示为12115.4中由于有一个1,一个2,二个1,故5表示为1112216.同理6表示为3122117.同理7表示为13112221 在上述规律的基础上,循环计算可得N的表示法:class Solution {public: stri...原创 2018-02-28 16:06:12 · 123 阅读 · 0 评论 -
237. Kth Largest Element in an Array
寻找数组的第k大数:思路即为对数组进行“简易快速排序”,那么数组的(k-1)位置即为结果:每次使用快速排序后都确定一个mid值,满足在数组中mid右侧的值都比它大,左侧都比他小;若mid==(k-1),那么停止排序;若mid小于(k-1),那么继续对mid右侧进行快排;若mid大于(k-1),则对mid左侧进行快速排序。该题目的核心还是如何利用快速排序的思想,在快速排序的基础上进行一定的优化...原创 2018-03-02 15:41:29 · 96 阅读 · 0 评论 -
35. Search Insert Position
在有序数组中寻找最恰当插入target的位置:对于在有序数组中查找元素,直接二分法。class Solution {public: int searchInsert(vector<int>& nums, int target) { int left=0,right=nums.size()-1; int mid=(left+righ...原创 2018-03-05 20:43:42 · 104 阅读 · 0 评论 -
172. Factorial Trailing Zeroes
判断n的阶乘里有多少个0:class Solution {public: int trailingZeroes(int n) { int ans=0; while(n) { n /= 5; ans += n; } return ans; }};...原创 2018-03-29 19:54:55 · 116 阅读 · 0 评论 -
【全排列】77. Combinations
全排列问题: class Solution {public: vector<vector<int>> ans; void find(vector<int>& nums, int k, int n,int m) { if (nums.size() == k) ...原创 2018-04-03 22:15:17 · 107 阅读 · 0 评论 -
46. Permutations
全排列问题: (1)将字符串分为二部分,第一部分是字符串的第一个字符,第二部分是除第一个字符以外的其他字符; (2) 将字符串的第一部分与第二部分的字符依次进行交换,逐个生成全排列;class Solution {public: vector<vector<int>> permute(ve...原创 2018-02-28 15:28:25 · 144 阅读 · 0 评论 -
【回溯/二叉树】113. Path Sum II
class Solution {public: vector<vector<int>> pathSum(TreeNode* root, int sum) { vector<vector<int>> ans; vector<int> temp; if(root==NULL) ...原创 2018-06-29 18:29:41 · 176 阅读 · 0 评论 -
112. Path Sum
递归:注意叶子节点的左右子树均为空/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NUL...原创 2018-03-04 18:38:18 · 101 阅读 · 0 评论 -
237. Delete Node in a Linked List
删除一节点,且在链表中只有针对该节点的访问权:方法为删除该节点的下一个节点,并将下一节点的val赋给当前节点 void deleteNode(ListNode* node) { node->val=node->next->val; node->next=node->next->next; } ...原创 2018-03-31 23:03:21 · 99 阅读 · 0 评论 -
see-371. Sum of Two Integers
利用位运算求二个整数的和:原理异或运算是无进制加法,与运算可求得进位class Solution {public: int getSum(int a, int b) { int res; int flag=a&b;//进位 while(flag) { res=(a^b); //xor ...原创 2018-03-16 21:31:01 · 133 阅读 · 0 评论 -
see-204. Count Primes
可使用经典的划圈法:从2开始,将小于N且是2倍数的数都逐一排除该题有几个加速的地方:1.flag标记使用bool,而非int型(在后续的编程过程中,涉及flag标记的问题尽可能使用bool(0/1)型,而非int(0/1)型) 2. i<=sqrt(n); ...原创 2018-03-01 14:55:40 · 185 阅读 · 0 评论 -
see-70. Climbing Stairs
实质上是求解斐波那契数列问题:F(n)=F(n-1)+F(n-2),其中F(0)=F(1)=1class Solution {public: int climbStairs(int n) { // if(n==1||n==0) // return 1; // return climbStairs(n-1)+climbStairs(n...原创 2018-03-17 13:37:15 · 149 阅读 · 0 评论 -
see-326. Power of Three
如果一个数是3的N次方,那么3^x=N,其中x是整数,那么x=log10(N)/log10(3)。 class Solution {public: bool isPowerOfThree(int n) { double res=log10(n)/log10(3); if(abs(res-(int)(res))<0.0...原创 2018-03-13 16:00:25 · 102 阅读 · 0 评论 -
see-461. Hamming Distance
求海明距离:即二进制表示法中位置上二进制数不同的总个数,如0001和0100海明距离是2。先求异或,再确定结果用二进制表示后,其中1的个数。class Solution {public: int hammingDistance(int x, int y) { int res=0; int Xor=x^y; while(Xor!=0...原创 2018-03-12 16:55:30 · 123 阅读 · 0 评论 -
see-231. Power of Two
判断一个整数N是否是2的整次方。观察得知,若N是2的整次方,那么N的二进制表示法中一定只有一个1,且在最高位;N&(N-1)运算是将N的最右边一个1置零,该计算后若N为0,那么N即为2的整次方。class Solution {public: bool isPowerOfTwo(int n) { if(n<=0) return f...原创 2018-03-01 13:57:06 · 117 阅读 · 0 评论 -
【sort】57. Insert Interval
将intervals的元素按照start从小到大的顺序排序,并将有重叠区域的相邻元素融合;/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s,...原创 2018-05-06 17:29:43 · 214 阅读 · 0 评论 -
2. Add Two Numbers
遍历链表:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: Li...原创 2018-03-23 23:18:16 · 100 阅读 · 0 评论 -
412. Fizz Buzz
直接判断每个整数能否被3或者5整除:class Solution {public: vector<string> fizzBuzz(int n) { vector<string> res; for(int i=1;i<=n;i++) { if(i%3==0&&i%5...原创 2018-03-16 22:22:09 · 128 阅读 · 0 评论 -
【位运算】338. Counting Bits
任意一个整数左移一位后,1的个数不变,而且扩大一倍,变为偶数(末位必定为0),因此偶数中1的个数等于偶数的一半的数中1的个数;对于奇数而言,末位必定为1,相当于前一位的偶数在末位添加一个'1'vector<int> countBits(int num) { vector<int> table; table.push_back(0);...原创 2018-04-26 20:49:38 · 272 阅读 · 0 评论 -
238. Product of Array Except Self
存储当前位置左边的元素乘积left和右边的元素成绩right,那么当前元素的返回值即为left*right;vector<int> productExceptSelf(vector<int>& nums) { vector<int> ans(nums.size(),1); int left=1; fo...原创 2018-05-13 13:47:16 · 85 阅读 · 0 评论 -
155 min stack
typedef struct { int data[20000]; int min[20000]; int top; int mintop;} MinStack;/** initialize your data structure here. */MinStack* minStackCreate(int maxSize) { MinStack * stack = (Min...原创 2018-05-21 22:48:46 · 165 阅读 · 0 评论 -
【位运算】762. Prime Number of Set Bits in Binary Representation
依次计算[L,R]内每个十进制数字所包含的二进制1的个数:class Solution {public: int find1num(int n){ int num=0; while(n) { num++; n = n&(n-1); } return num;}int countPrimeSetBits(int L, int R) { int...原创 2018-05-23 17:21:45 · 110 阅读 · 0 评论 -
27. Remove Element
删除数组中指定元素,将剩余的M个元素置于数组的前M个位置:该题与26. Remove Duplicates from Sorted Array同理,可采用双指针法,指针i遍历数组,res指向依次摆放剩余元素的位置;若nums[i]不是待删除元素,则将nums[i]置于res位置,res后移一位,指向下一个放置不可删除元素的位置;class Solution {public: ...原创 2018-03-09 14:30:20 · 113 阅读 · 0 评论 -
476. Number Complement
将整数的二进制逐位反转:每位与1异或即可,可完成反转class Solution {public: int findComplement(int num) { if(num==0) return 1; int flag=num,temp=1; while(flag) { ...原创 2018-03-16 22:14:02 · 135 阅读 · 0 评论 -
217. Contains Duplicate
直接上哈希表,简单明了ps:unordered_map<int,bool> table; //查找x是否在table中,如存在,则满足table.find(X)!=table.end()class Solution {public: bool containsDuplicate(vector<int>& nums) { if...原创 2018-03-02 12:23:07 · 99 阅读 · 0 评论 -
【二叉树】129. Sum Root to Leaf Numbers
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */c...原创 2018-06-28 21:10:06 · 124 阅读 · 0 评论 -
【二叉树】108. Convert Sorted Array to Binary Search Tree
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; *...原创 2018-06-28 20:45:02 · 114 阅读 · 0 评论 -
【贪心】55. Jump Game
bool canJump(vector<int>& nums) { int posMax=0; for(int i = 0;i<nums.size();i++) { if(i<=posMax) posMax = max(posMax, i + nums[...原创 2018-05-06 20:40:31 · 135 阅读 · 0 评论 -
【回溯】78. Subsets
class Solution {public: vector<vector<int>> ans; vector<vector<int>> subsets(vector<int>& nums) { vector<int> temp; find(nums,ans,...原创 2018-04-16 19:22:32 · 167 阅读 · 0 评论 -
【栈】20. Valid Parentheses
括号匹配问题:顺序扫描字符串,当前字符为(,{,[时,入栈;当为),},]时,检查是否为栈顶元素的匹配字符;若匹配,栈顶元素出栈,否则返回false;class Solution {public: bool isValid(string s) { stack<char> table; unordered_map<char,cha...原创 2018-04-20 22:05:42 · 88 阅读 · 0 评论 -
445. Add Two Numbers II
遍历二个链表,存储在vector数组内;然后进行加法运算,注意进位,并建立新链表,采取head插入的方式/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NUL...原创 2018-05-04 23:09:33 · 111 阅读 · 0 评论 -
415. Add Strings
注意进位:class Solution {public: string addStrings(string num1, string num2) { int i=num1.size()-1,j=num2.size()-1,flag=0; string res; while(i>=0&&j>=0) ...原创 2018-03-25 18:52:02 · 87 阅读 · 0 评论 -
67. Add Binary
注意进位:class Solution {public: string addBinary(string s, string t) { int flag = 0; string res; int i = s.size() - 1, j = t.size() - 1; w...原创 2018-03-25 15:29:03 · 94 阅读 · 0 评论 -
see-189. Rotate Array
以[1,2,3,4,5,6,7]和k=3为例,处理之后的答案为[5,6,7,1,2,3,4],对该答案反转可以得到[4,3,2,1,7,6,5]。观察可知,相当于把原先的元素根据K值大小分为二段,分别反转,之后再把整个数组反转即可。且元素的移动是有周期的,周期即为数组的长度。针对k值大于数组元素个数的情况,可以先进行一个模运算。class Solution {public: ...原创 2018-03-02 21:54:17 · 172 阅读 · 0 评论 -
see-191. Number of 1 Bits
统计整数的二进制表示法中1的个数:对于整数N,N&(N-1)可以把N的二进制表示法中最右边的1置零,基于此,可以快速统计1的个数。class Solution {public: int hammingWeight(uint32_t n) { int res=0; while(n!=0) { n=n&am...原创 2018-03-02 21:33:13 · 117 阅读 · 0 评论 -
see-136. Single Number
数组中元素只有一个只出现一次,其他元素均出现二次,找出那个只出现一次的元素:对数组元素进行异或操作,二个相同元素的异或结果为0,那么操作完成后得到的结果即为那个只出现一次的元素。class Solution {public: int singleNumber(vector<int>& nums) { int res=nums[0]; ...原创 2018-03-03 20:40:02 · 130 阅读 · 0 评论 -
see-120. Triangle
动态规划: triangle[i][j]=min(triangle[i][j]+triangle[i+1][j],triangle[i][j]+triangle[i+1][j+1]); return triangle[0][0];2 2 2 ...原创 2018-03-04 13:19:29 · 225 阅读 · 0 评论 -
see-118. Pascal's Triangle
找规律即可11 11 2 11 3 3 11 4 6 4 1 class Solution {public: vector<vector<int>> generate(int numRows) { vector<vector<int>>...原创 2018-03-04 13:56:50 · 133 阅读 · 0 评论