算法,面试
坚持就是胜利的琦士
这个作者很懒,什么都没留下…
展开
-
leetcode 461. Hamming Distance
一.本题熟悉一个算法。 判断一个二进制x有几个1 即x&1 看x的最低位是否为1,然后将x右移再&1即可。知道x为0; 二.代码如下: class Solution { public: int hammingDistance(int x, int y) { int count=0; int result = x^y;原创 2017-04-17 23:18:39 · 257 阅读 · 0 评论 -
Longest Palindrome
leetcode Longest Palindrome 用map找每个元素出现个数,result +=偶数出现的次数,若其中有奇数次,-1取偶数次,最后+1即可。 ######注意可以用unorderd_map提高效率。 代码如下:class Solution { public: int longestPalindrome(strin原创 2017-04-21 00:07:05 · 343 阅读 · 0 评论 -
Kth Smallest Element in a BST
这道题不难。 但是卡了一会,原因是if(count=k-1) 我没写==。 然后突然想起吉林大学的一位C++老师,碰到 这种情况,我们要写k-1 ==count!!! 递归思路如下 1.若左子树有k-1个节点,返回根的值 2.若左子树有多余k-1个,则在左子树找第k小的 3.若左子树少于k-1个,则在右子树找 k-左子树节点数-1小的 代码如下:cl原创 2017-04-20 16:24:56 · 214 阅读 · 0 评论 -
京东面试 终结者C
这道题只A了70%。 但是在编写程序过程中学到了很多细节。 一.memset的使用,赋值是按字节赋值的,也就是第二个参数只能是0-255。 啥是按字节赋值? eg:memset(a,0,sizeof(int)*200),使用00000000给一个字节赋值,而int是4个字节,则每一个int被32个0填充,一共200个int。 那么我们就不可以memset(a,1,sizeof(int)*原创 2017-04-17 12:38:31 · 431 阅读 · 0 评论 -
leetcode Reverse Linked List II
这道题是给定了位置的逆序。 一.这道题主要是对于少于等于2个节点 和 多于2个节点的情况进行区别。少于2个节点的时候presubhead 是NULL。 当presubhead是null的时候,tail才是头。 presubhead不是null,head才是头。 二.代码 class Solution { public: ListNode* reverseBetween原创 2017-04-17 12:28:55 · 205 阅读 · 0 评论 -
leetcode Reverse Linked List
这道题题目的hint说,让我们尝试迭代和递归2种做法. (1)迭代比较简单。注意最后头结点的next置为空,还有注意判断空,或者是只有一个节点的时候,这2种情况都直接返回root即可。 (2)主要是递归的做法。 函数功能是逆置一个以head为头的链表,那么可以先逆置head->next的,最后处理head。(可以有->next->next这种写法的) class Solution { p原创 2017-04-17 12:26:34 · 181 阅读 · 0 评论 -
Convert Sorted Array to Binary Search Tree
这道题总体比较简单~ 巩固基础知识 一.给定有序的数组,如何构建一颗平衡二叉树(平衡二叉树也是二叉排序树的一种)。 二. 还有函数参数的问题,传进来的是一个vector的引用,可以不用管,直接用就好。递归的时候,传入参数使用迭代器写的vector。 三.代码 class Solution { public: vector left; vector right;原创 2017-04-17 12:12:02 · 192 阅读 · 0 评论 -
leetcode 543. Diameter of Binary Tree
leetcode 543. Diameter of Binary Tree 一.这道题考察的是对题目的理解,主要是最长路径不一定是经过根的。也就是树的diameter为 max(左子树的diameter,右子树的diameter,左子树深度+右子树深度) 注意路径长度是边的数量,所以max的最后一项不要加1 二. 其实真不简单。 难的是思路。题目tag竟然写easy好伤心。。 三.代码原创 2017-04-15 21:16:40 · 238 阅读 · 0 评论 -
leetcode 104 226 100
leetcode 104 226 100 这三道题基本一样,一次AC,没啥说的原创 2017-04-15 14:08:49 · 637 阅读 · 0 评论 -
538. Convert BST to Greater Tree
leetcode 538. Convert BST to Greater Tree 一. 这道题我想起了考研时候的二叉排序树的特点~即中序遍历是递增的 但是我又想,只知道中序的话是不能还原出原二叉树的。 然后又去想 递归,具体过程是 计算某个节点的val的时候,必须加他父亲节点还有他的右子树的和,但是当一个节点是他父亲节点的右侧节点时,还得去找父亲的父亲。。所以递归没有想出来。于是求助了答案原创 2017-04-14 23:41:51 · 259 阅读 · 0 评论 -
leetcode508 Most Frequent Subtree Sum
leetcode508 Most Frequent Subtree Sum 一. 其实本题思想比较简单~ 学习的更多的是map的用法 二. (1)还有第一次运行效率只打败了20%的选手,但是一看其他人的C++程序,用的也是递归方法啊,但是运行只用18ms,我用了23ms,仔细一看,是在递归中就直接找到max了,而我重新定义函数找了一遍。 (2)反正要遍历map的所有元素,那原创 2017-04-14 19:43:07 · 233 阅读 · 0 评论 -
leetcode 515. Find Largest Value in Each Tree Row
Hi,又见面了~第二天,难度和之前差不多。 515. Find Largest Value in Each Tree Row 一.犯的错误 (1)逻辑上的问题都是在调试中发现的,比如这题在没加最后一句push_back的时候,发现输出只有2层的输出,最后一层没输出。然后才发现是最后一个if没走到,所以加了一个push_back 二。 初始max的赋值我naive的认为初始化-1原创 2017-04-13 21:35:58 · 201 阅读 · 0 评论 -
leetcode 476. Number Complement
本题比较简单,从左到右找到第一个1,也即确定mask。 若n&mask == 1 则n=n-mask 若n&mask ==0 则 n= n+mask; 代码如下 class Solution { public: int findComplement(int num) { int mask=pow(2,30); cout原创 2017-04-18 00:25:45 · 157 阅读 · 0 评论 -
leetcode String to Integer (atoi)
一个看似很简单的问题。 然而遇到这样一个问题 int sum=0; sum-=pow(10,2) sum竟然等于-99; 原因是pow参数和返回类型都是double,转型为int会丢失精度。 然后把sum改为double,输出就是对的,也不是-100.000,C++ cout自动格式化。原创 2017-08-05 15:23:47 · 257 阅读 · 0 评论