摘要:找出两个数组相同的元素。返回相同的元素集合即可。 两个思路: 1. 先将num1转为集合set1(去重),再遍历num2,查找set1中有没有出现。 2. 哈希,用两个unordered_map<int, bool>,再遍历即可。 这里用方法2:
阅读全文
摘要:string reverseVowels(string s) { for (int i = 0, j = s.size() - 1; i < j;) { bool l = isVowels(s[i]); bool r = isVowels(s[j]); if (l && r) ...
阅读全文
摘要:string reverseString(string s) { int size = (s.size() >> 1); for (int i = 0; i < size; i++) { swap(s[i], s[s.size() - i - 1]); } return move(s); } ...
阅读全文
摘要:没想出来不用循环的。记录下。 如果是2的次方,必有num & (nums - 1) 或者第二步排除,直接(num - 1) % 3为0也可以,如果是4的倍数,减1后必能被3整除,从二进制角度考虑下即可。 不建议用对数,涉及浮点数,精度问题,见:https://discuss.leetcode.com
阅读全文
摘要:判断是否是3的次方。 找了下二进制和十进制规律,没有明显规律。 要么对数;要么利用int下最大3的次方:哈希或整除。
阅读全文
摘要:关键在于,想出类似最大子数组和中的一种解法。 缓存每个数前的所有和,需要的时候,减一下即可。
阅读全文
摘要:普通的做法就是两个哈希。 这里用了一点小技巧,比如a和b双射,不相互保存,而是都保存一个数字,之后每次增加映射,数字都增加1。 节省空间用。
阅读全文
摘要:int firstBadVersion(int n) { // long start = 1; // long end = n; int start = 1; int end = n; int last = -1; while (start <= end) { ...
阅读全文
摘要:第一次写的代码,实际效率是O(n)的,但判断多了一点。 其实可以很简洁:
阅读全文
摘要:bool isUgly(int num) { while (num < 1) return false; while (num % 2 == 0) num /= 2; while (num % 3 == 0) num /= 3; while (num %...
阅读全文
摘要:给个整数,每位相加,如果位数大于1,重复,知道剩一位。 附加要求:要求不用递归循环,O(1)。 看到这要求,肯定有规律: - D,从10开始推,一下子就看出来了。
阅读全文
摘要:返回所有根到叶子的路径。用个“全局”的ret代替合的过程。
阅读全文
摘要:快慢指针找到中点,反转后半段,比较。 其实慢指针走的时候就可以开始反转。
阅读全文
摘要:class MyQueue { public: /** Initialize your data structure here. */ stack r, b; MyQueue() { } /** Push element x to the back of queue. */ void push(int x) { ...
阅读全文
摘要:bool isPowerOfTwo(int n) { if (n < 1) return false; int m = 1; for (int i = 0; i < 32; i++) { int j = n & m; if (j == n) return tru...
阅读全文
摘要:TreeNode* invertTree(TreeNode* root) { if (root == NULL) return NULL; auto temp = root->left; root->left = root->right; root->right = temp; invert...
阅读全文