![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
路漫漫吾将上下而求索
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 11. 旋转数组的最小数字 (重要的是在路上)
题目描述: 无重复数字的旋转数组: 有重复数字的旋转数组: 暴力思路: 暴力遍历查找最小值: 时间复杂度 O(n) 排序后再取最后一个:时间复杂度 O(nlogn) 题解: 无重复数字的旋转数组: /** * 二分查找 * 时间复杂度是: O(logn) * 空间复杂度是:O(1) * @param nums * @return */ public int findMin_3(int[] nums) { int left = 0; int原创 2021-04-05 11:34:16 · 62 阅读 · 0 评论 -
剑指 Offer 10- II. 青蛙跳台阶问题 (偶然也是必然)
题目描述: 思路: //典型的动态规划题目: // 1 // 1+1、2 // 1+1+1、1+2、2+1 // 1+1+1+1、1+1+2、1+2+1、2+1+1、2+2 // 跳n级台阶时有:f(n)种跳法。在所有的跳法种,青蛙的最后一步只有两种情况:跳上1级或2级台阶。 // 当为1级台阶:剩 n-1 个台阶,此情况共有f(n - 1)种跳法。 // 当为2级台阶:剩 n-2 个台阶,此情况共有f(n - 2)种跳法。 // f(n) 为以上两种情况之和,即f(n) = f(n - 1) +原创 2021-04-05 10:58:40 · 97 阅读 · 0 评论 -
剑指offer 10-1 斐波那契数列
题目: 斐波那契数列 解题思路: 动态规划最简单的题目,而且直接给出了数学公式,dp[i]=dp[i-1]+dp[i-2]。 注意是答案需要去模 代码: 递归 错误示范——超时 int fib(int n) { if(n==0) return 0; else if(n==1) return 1; return (fib(n-1)+fib(n-2))%1000000007; 为何会超时呢? 因为中间存原创 2021-04-04 16:26:02 · 99 阅读 · 0 评论 -
剑指offer -- T1二维数组中查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 [ [1,2,8,9], [2,4,9,12], [4,7,10,13], [6,8,11,15] ] 给定 target = 7,返回 true。 给定 target = 3,返回 false。 思路 /* 思路 矩阵是有序的,从左下角来看,向上数字递减,向右数字递增, 因此从左下角开始查找,当要查找数原创 2021-03-30 20:58:35 · 75 阅读 · 0 评论 -
算法题 -- 三数之和
解法思路: 排序 + 双指针 难点: 去重: 如果是暴力枚举的话,去重还需要花费时间。 一个思路是:抱留原有的三重循环框架,让a<b<c, 保证了只有 (a, b, c)这个顺序会被枚举到,而 (b,a,c)、(c,b,a) 等等这些不会,这样就减少了重复。 要实现这一点,我们可以将数组中的元素从小到大进行排序。 同时,对于每一重循环而言,相邻两次枚举的元素不能相同,否则也会造成重复。 我们使用三重循环枚举到的第一个三元组为 (0, 1, 2),如果第三重循环继续枚举下一个元素,那么仍然是三元组原创 2021-03-30 19:24:30 · 171 阅读 · 0 评论 -
算法刷题 -- 找出数组中重复的数字
/* 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。 数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。 请找出数组中任意一个重复的数字。 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 */ class Solution { public int findRepeatNumber(int[] nums) { int temp; for (int i = 0;原创 2021-03-30 18:04:50 · 292 阅读 · 0 评论