之前遇到的一道算法题,这里记录一下。 算法思想:因为是有序的,所以我们用s存放第一个元素的下标,用e存放最后一个元素的下标,那么arr s 就是所有元素中最小的,arr e 就是所有元素中最大的,所以我们判断arr s arr e sum的值是否大于 ,如果大于 那就说明 arr e 太大了,那么就e 。如果小于 ,arr s 太小了,那就s 。这个时候判断是否距离比上一个我们记录的距离更小,更小 ...
2020-09-17 16:31 0 492 推荐指数:
题目: 给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 思路: 要求的时间复杂度为O(n),则只允许一次循环。 程序: class Solution: def longestConsecutive ...
面试题: 怎样把两个有序数组合并成有序数组呢 逻辑步骤: 1.假设两个数组为A和B 2.A和B都是从小到大的顺序进行排列 ** 1.我们可以直接比较两个数组的首元素,哪个小就把这个小元素放入可变数组。 2.把小元素所在的数组中的这个元素删除。 3.继续比较两个数组中的首 ...
先讨论出现次数大于n/2的数字,如果这样的数字存在,那么这个数出现的次数大于其他数出现的次数的总和。 在数组A中,我们定义两个数据集合a1,a2。a1为出现次数大于n/2的数的集合,a2为其余数组成的集合。对于数组 A中元素a、b,假设a不等于b,那么有两种情况,分别为:a属于a1,b属于 ...
有两个数组a,b,大小都为n,数组元素的值任意整形数,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小。 当前数组a和数组b的和之差为 A = sum(a) - sum(b) a的第i个元素和b的第j个元素交换后,a和b的和之差 ...
题目: 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。 思路:二分法,使用一个指针来找到数字的开头和结尾位置 ...
时间复杂度是一个函数,它定量描述了该算法的运行时间。 常见的时间复杂度有以下几种。 1,log(2)n,n,n log(2)n ,n的平方,n的三次方,2的n次方,n! 1指的是常数。即,无论算法的输入n是多大,都不会影响到算法的运行时间。这种是最优的算法。而n!(阶乘)是非常差的算法。当n ...