-
Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in the array. Here a k-diff pair is defined as an integer pair (i, j), where i and j are both numbers in the array and their absolute difference is k. Example 1: Input: [3, 1, 4, 1, 5], k = 2 Output: 2 Explanation: There are …
Read More -
Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once. Find all the elements of [1, n] inclusive that do not appear in this array. Could you do it without extra space and in O(n) runtime? You may assume the returned list does not count as extra space. …
Read More -
头条校招(今日头条2017秋招真题) 题目描述 头条的2017校招开始了!为了这次校招,我们组织了一个规模宏大的出题团队。每个出题人都出了一些有趣的题目,而我们现在想把这些题目组合成若干场考试出来。在选题之前,我们对题目进行了盲审,并定出了每道题的难度系数。一场考试包含3道开放性题目,假设他们的难度从小到大分别为a, b, c,我们希望这3道题能满足下列条件: a<= b<= c b - a<= 10 c - b<= 10 所有出题人一共出了n道开放性题目。现在我们想把这n道题分布到若干场考试中(1场或多场,每道题都必须使用且只能用一次),然而由于上述条件的限制,可能有一些考试没法凑够3道题,因此出题人就需要多出一些适当难度的题 …
Read More -
有一个由很多木棒构成的集合,每个木棒有对应的长度,请问能否用集合中的这些木棒以某个顺序首尾相连构成一个面积大于 0 的简单多边形且所有木棒都要用上,简单多边形即不会自交的多边形。 初始集合是空的,有两种操作,要么给集合添加一个长度为 L 的木棒,要么删去集合中已经有的某个木棒。每次操作结束后你都需要告知是否能用集合中的这些木棒构成一个简单多边形。 输入描述: 每组测试用例仅包含一组数据,每组数据第一行为一个正整数 n 表示操作的数量(1 ≤ n ≤ 50000) , 接下来有n行,每行第一个整数为操作类型 i (i ∈ {1,2}),第二个整数为一个长度 L(1 ≤ L ≤ 1,000,000,000)。如果 i=1 代表在集合内插 …
Read More -
有 n 个字符串,每个字符串都是由 A-J 的大写字符构成。现在你将每个字符映射为一个 0-9 的数字,不同字符映射为不同的数字。这样每个字符串就可以看做一个整数,唯一的要求是这些整数必须是正整数且它们的字符串不能有前导零。现在问你怎样映射字符才能使得这些字符串表示的整数之和最大? 输入描述:每组测试用例仅包含一组数据,每组数据第一行为一个正整数 n , 接下来有 n 行,每行一个长度不超过 12 且仅包含大写字母 A-J 的字符串。 n 不大于 50,且至少存在一个字符不是任何字符串的首字母。 输出描述:输出一个数,表示最大和是多少。 输入例子: 2 ABC BCA 输出例子: 1875 一开始看漏了首位不能映射到0的条件... …
Read More -
印象中是并没有看到jd,只是要求熟悉算法和数据结构+C艹...于是当时扔了份简历过去。 然后立刻就接到了一个电话,大概问了下一些基本情况。。以及。。你为什么不考研。。。 然后说之后会安排面试。。就杳无音信了。。然后突然有一天周末晚上11点接到短信说要安排面试orz... 【一面】 一面先是手写代码...都是面试套路题,就不说了... 哦其中一道题给出了优于面试官手中正解复杂度(nlgn)的复杂度的做法... 因为我说完我的做法给出了一点正确性的证明以后听他说了句“哦这题原来可以O(n)啊” 然后问了一点cpp基础。。。不记得问什么了。。反正也都很简单? 之后问了两个智力题吧。。。其中一个是7g+9g砝码称140g中的50g的问 …
Read More -
阿里面试算法题(转载)
Mar 14, 2017 · 5 min readI want to match those five numbers 3, 7, 8, 9, 87 through regular express. Here is my thought: - match those four numbers `3 7 8 9` var `^[3|7|8|9]$` - match number `87` var `^87$` Then combine them together, `(^[3|7|8|9]$|^87$)`. With some test, it seems correct. Is there any way to do that more efficiently? …
Read More -
O(1)得到最小值的栈
Mar 12, 2017 · 1 min read题意:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数,要求时间复杂度为O(1) 思路:标题党去死一死好么。。。真是无趣。。。就是用两个栈封装成一个。。。一个栈s1正常搞。。。一个是辅助栈s2。。每次去存min(value,s2.top()); 。。。我还以为什么黑科技。。。 class Solution { public: stack<int>s1,s2; void push(int value) { s1.push(value); if (s2.empty()||value<s2.top()) s2.push(value); else s2.push(s2.top()); } void …
Read More -
题意:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 思路:二分。。。注意有重复元素。。。 class Solution { public: int minNumberInRotateArray(vector<int> a) { int siz = a.size(); int l = 0 ; int r = siz-1; while (r-l>1) { int mid = (l+r)>>1; if (a[mid]>a[r]) l …
Read More -
用两个栈实现队列
Mar 11, 2017 · 1 min read思路: 一个元素入队的时候直接插入到stack1中。。。 一个元素出队的时候。。。如果stack2不为空。。stack2顶的元素就是要出队的。。 如果stakc2为空。。。就将stack1清空,按照元素出栈的顺序依次入栈到stack2 class Solution { public: void push(int node) { stack1.push(node); } int pop() { if (stack2.size()!=0) { int ret = stack2.top(); stack2.pop(); return ret; } while (!stack1.empty()) { int val = …
Read More