算法
火柴有猿
天道酬勤
展开
-
程序猿不得不知道的算法--只出现一次的数
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?先找出题目中的重点要求: 1、线性时间复杂度:要求我们的代码时间复杂度最高为O(n),不能有嵌套循环等。 2、不使用额外空间:要求空间复杂度最高为O(1)。除此之外,还有重要的信息:除了某个元素只...原创 2019-08-07 14:53:53 · 499 阅读 · 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 · 788 阅读 · 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 · 482 阅读 · 0 评论 -
程序猿不得不知道的算法--合并两个有序数组
混合插入有序数组,由于两个数组都是有序的,所以只要按顺序比较大小即可。题目中说了nums1数组有足够大的空间,说明我们不用resize数组,又给了我们m和n,那就知道了混合之后的数组大小,这样我们就从nums1和nums2数组的末尾开始一个一个比较,把较大的数,按顺序从后往前加入混合之后的数组末尾。需要三个变量i,j,k,分别指向nums1,nums2,和混合数组的末尾。进行while循环,如...原创 2019-08-07 15:03:06 · 507 阅读 · 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 · 541 阅读 · 0 评论