算法
火柴有猿
天道酬勤
展开
-
程序猿不得不知道的算法--只出现一次的数
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 先找出题目中的重点要求: 1、线性时间复杂度:要求我们的代码时间复杂度最高为O(n),不能有嵌套循环等。 2、不使用额外空间:要求空间复杂度最高为O(1)。 除此之外,还有重要的信息: 除了某个元素只...原创 2019-08-07 14:53:53 · 493 阅读 · 0 评论 -
程序猿不得不知道的算法--求众数
题目描述 给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在众数。 示例 1: 输入: [3,2,3] 输出: 3 示例 2: 输入: [2,2,1,1,1,2,2] 输出: 2 分析 用到的算法是:摩尔投票算法 算法在局部变量中定义一个序列元素(value)和一个计数器(count), ...原创 2019-08-07 14:58:07 · 781 阅读 · 0 评论 -
程序猿不得不知道的算法--搜索二维矩阵 II
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23...原创 2019-08-07 15:01:05 · 475 阅读 · 0 评论 -
程序猿不得不知道的算法--合并两个有序数组
混合插入有序数组,由于两个数组都是有序的,所以只要按顺序比较大小即可。题目中说了nums1数组有足够大的空间,说明我们不用resize数组,又给了我们m和n,那就知道了混合之后的数组大小,这样我们就从nums1和nums2数组的末尾开始一个一个比较,把较大的数,按顺序从后往前加入混合之后的数组末尾。需要三个变量i,j,k,分别指向nums1,nums2,和混合数组的末尾。进行while循环,如...原创 2019-08-07 15:03:06 · 502 阅读 · 0 评论 -
程序猿不得不知道的算法--鸡蛋掉落
public int superEggDrop(int K, int N) { /* 若测试k次,能够确定结果的最大测量楼层范围为[0,dp[k][m]],则称dp[k][m]为最大测量楼层,则问题就是就是找到一个最小的m使得dp[k][m]>=N 转移方程dp[k][m] = dp[k-1][m-1] + dp[k][m-1] + 1 原因:假设第...原创 2019-08-07 15:04:14 · 534 阅读 · 0 评论