题目: Given n non-negative integers representing an elevation map where the width of each bar is 1, co…
分类:数组相关算法
(算法)二分查找的搜索区间
题目: 给定一个包含 n 个整数的排序数组,找出给定目标值 target 的起始和结束位置。 如果目标值不在数组中,则返回[-1, -1] 思路: 1、直接遍历数组,复杂度O(n) 2、二分查找 先通过二分查找,找到ta…
(算法:二分查找)在排序数组中,找出给定数字出现的次数
题目: 在排序数组中,找出给定数字出现的次数 思路: 既然出现排序数组,很容易想到二分查找,时间复杂度为O(logn); 先通过二分查找找到最左边出现该数字的下标left(如果没找到,则返回-1),然后通过二分查找找到最…
(算法)构造最大数
题目: 给定一个只包含正整数的数组,给出一个方法,将数组中的数拼接起来,使得拼接后的数最大。例如,[1, 32, 212]拼接之后,所得到的最大数为322121。 思路: 比较方法:两个数先后顺序的确定,如a,b,如果a…
(笔试题)区间最大重叠
题目: 在一维坐标轴上有n个区间段,求重合区间最长的两个区间段。 区间段的数据结构定义如下: struct Interval{ int start; int end; }; 思路: 首先按照区间的左端点即start对n个…
(笔试题)把一个整数数组中重复的数字去掉
题目: 把一个整数数组中重复的数字去掉,并输出剩下的不重复的元素。(要求不能开辟新空间) 思路: 先排序,然后遍历数组比较,详见代码 代码: #include <iostream> #include <…
(算法)旋转有序数组中查找某个数
题目: 假设有个有序数组在某个位置旋转,得到新的数组,即为旋转有序数组。如:(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). 现给定一个这样…
(算法)只出现一次的最小数
题目: 给定一数组,里面的数字为1~N,每个数出现一次或两次,求只出现一次的最小数。 要求: 空间复杂度:O(1),时间复杂度:O(n) 思路: 题目给定的数字为1~N,因此可以通过交换的方法,将数组下标与数字对应存放,…
(算法)字典序数列
题目: 给定正整数N,要求对1~N的所有数按照字典序来排列, 如: 1-10:1 10 2 3 4 5 6 7 8 9 1-100:1 10 100 11 12 13 14 15 16 17 18 19 2 20 21 …
(算法)等概率选出m个整数
题目: 从大小为n的整数数组A中随机选出m个整数,要求每个元素被选中的概率相同。 思路: n选m,等概率情况下,每个数被选中的概率为m/n。 方法: 初始化:从A中选择前m个元素作为初始数组; 随机选择:从第m个元素开始…
(算法)只出现两次的最小数
题目: 给定一数组,里面的数字为1~N,每个数出现一次或两次,求只出现一次的最小数。 要求: 空间复杂度:O(1),时间复杂度:O(n) 思路: 题目给定的数字为1~N,因此可以通过交换的方法,将数组下标与数字对应存放,…
(算法)两个有序数组的第k大的数
题目: 有两个数组A和B,假设A和B已经有序(从大到小),求A和B数组中所有数的第K大。 思路: 1、如果k为2的次幂,且A,B 的大小都大于k,那么 考虑A的前k/2个数和B的前k/2个数, 如果A[k/2]<B…