03 2016 档案
摘要:本来只是简单地比较两棵子树的高度,但是看到题目中的every node就想偏了。 实际上就是计算左右子树的高度差是否大于1. 思路:求树的height,某个节点的height = max(左子树height,右子树height) + 1. 还有其他算法,留坑。
阅读全文
摘要:unordered_map< string, vector<string> >map;存sort之后的每个string及其一串anagram。只是函数的简单调用。注释部分是另一种语法,思路是一样的。
阅读全文
摘要:secret和guess按位读入,如果相等bull就加1,不相等就在各自统计不同数字出现次数的数组里加1(s_map[i]指secret里数字i出现的次数)。最后s_map和g_map存的是各自string中位置不等的各数值出现的次数,cow等于两个数组中相同位置的最小数。
阅读全文
摘要:维护一个set,保存i之前且与i相差不超过k的一系列数,所以当i>k时,会删去set中nums[i - k - 1]的值,因此k要进行处理,如果k>nums.size(),k赋值为nums.size() - 1。 维护map,对应关系是数值及其位置,存放数值的最新位置(即最大位置),如果读入的数已存
阅读全文
摘要:最简单粗暴的思路,sort后比较当前数和后一个数是否相同。但是耗时,O(nlogn) 用set优化,放入一个数,如果已经在set中,那么return true 然而set更慢了…… 把set改为unordered_set会快一些,但是仍没有sort快。
阅读全文
摘要:注:质数从2开始,2、3…… 改进过程: 一、常规思路是对小于n的每一个数进行isPrime判断,isPrime(int x)函数中for(int i = 2; i <= x /2; ++i),如果x%i==0,return false。 二、将isPrime(int x)中i的范围改为i * i
阅读全文
摘要:与H-Index思路相同,因为输入已经sort了,所以原来的代码去掉了sort,但是会TLE,于是把citation.size()放入一个变量中,这样就不用每次都调用一遍函数了,AC但是82test cases 1038ms,之前H-Index 81test cases 4ms。 看了别人的代码,发
阅读全文
摘要:结果小数点后面如果是循环的话,要用括号把循环出现的部分括起来。 找出循环部分的思路: 维护一个unordered_map<long, long>dict,对应关系是余数及其在res中的位置。每次计算小数点后的每一位结果时,查找是否已经在dict中,如果已经在了,那么说明已经找到了重复的部分(如结果0
阅读全文
摘要:N个数中有h个数>=于h,其余的<h。 在纸上写出后便易得,当N个数排序后,在citation[i]的右边(包括它本身),共有N-i个数,这些数均>=citation[i],即有N-i个数>=citation[i],使h=N-i,如果此时citation[i]>=N-i,那么必定有N-i个数>=N-
阅读全文
摘要:happy number的定义:不断的将每一位平方并相加,最后能得到1的数字。 核心思想:如果不是happy number的话,那么这个数会陷入死循环,即每位平方和的结果会和之前的结果重复。略微带点动态规划的思想(?) 注:set.insert(x)返回的是一个pair,first是一个指向x的迭代
阅读全文
摘要:最初思路,也是最简单的思路,维护一个string res,保留当前的不重复的字符串。string s一位位读进,读进每一位时和res中的每一位进行比较,没有重复就加入res;重复了的话,res就只保留与s[i]重复的那个char右边的部分,并加上s[i],在对res进行截取操作之前更新maxLen。
阅读全文
摘要:
阅读全文
摘要:注意标记了!!的两行代码不能调换,否则RE.因为如果输入是[1,2], k = 3,那么在while循环里num=1时,end=NULL,end->next引起RE. 思路:先通过while循环得到要翻转的起始和末尾节点start、end,进行翻转,并和上一段节点的末尾prev,下一段节点的起始
阅读全文
摘要:看了网上别人的代码总算搞懂了题意,把整个链表分为两部分,左边有len-k个节点,右边有k个节点,然后这两部分次序调换。 注意有k>len的情况,因此首先要处理k,k=k%len。 首先遍历至链表尾,将表尾链至表头(tmp->next = head),形成一个闭环,再从表尾出发,经过len - k %
阅读全文
摘要:merge思想,应该还有更快算法,留坑。
阅读全文
摘要:一开始理解错题意,以为是根据节点内的值是奇偶来分成不同group,实际上是节点所在位置的奇偶(位置从1开始算起)。 思路正确后仍然RE的代码: 起因是8、9行,因为odd和even本身已经是head和head->next两个节点,再设置next为NULL就相当于截断了原链表,even->next
阅读全文
摘要: 最简单的思路,遍历一遍链表得到长度,将前半段放入栈中,再与后半段比较。时间和空间均为O(n)。 时间O(n),空间O(1): 思路:翻转后半部分的链表,然后前半部分和后半部分一一进行比较。 具体实现: getMid函数中,fast一次走2步,slow一次走1步,因此假设全长len,len偶时
阅读全文
摘要:1 class Solution { 2 public: 3 ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { 4 ListNode* head = new ListNode(0); 5 ListNode* res = head; 6 whi
阅读全文
摘要:1 class Solution { 2 public: 3 int length(ListNode* head){ 4 ListNode* tmp = head; 5 int len = 0; 6 while(tmp != NULL){ 7 ++ len; 8 tmp = tmp->next; 9
阅读全文
摘要:1 class Solution { 2 public: 3 void deleteNode(ListNode* node) { 4 if(node == NULL || node->next == NULL){ 5 node = NULL; 6 return; 7 } 8 ListNode* tm
阅读全文
摘要:思路源于位运算关于异或^的定律:a^b^b = a, a^0 = a; 1 class Solution { 2 public: 3 int singleNumber(vector<int>& nums) { 4 int res=0; 5 for(auto num : nums) 6 res ^=
阅读全文
摘要:[26]位数组,存储对应字母出现的个数,s、t分别得到不同数组,比较两个数组是否相同。 1 class Solution { 2 public: 3 bool isAnagram(string s, string t) { 4 if(s.length() != t.length()) return
阅读全文
摘要:不符合的情况有三种:1、pattern和str长度不符 2、pattern中不同字母指向str中同一词(a、b->同一词) 3、同一字母指向不同词(a->不同词) 1 class Solution { 2 public: 3 vector<string> split(string str){ 4 v
阅读全文
摘要:1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x),
阅读全文
摘要:1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x),
阅读全文
摘要:1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x),
阅读全文
摘要:1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x),
阅读全文
摘要:1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x),
阅读全文
摘要:1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NU
阅读全文
摘要:1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x),
阅读全文
摘要:前序遍历 递归: 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x)
阅读全文
摘要:1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x),
阅读全文
摘要:思路:维护两个stack<TreeNode*> stk1, stk2,stk1存放当前层的节点,stk2存放下一层的节点。 bool right表示下一层的顺序,如果为True则下一层为从右到左,因为stk2是stack,所以stk2先存cur->left,然后存cur->right。 当stk1为
阅读全文

浙公网安备 33010602011771号