
算法
bajin7353
这个作者很懒,什么都没留下…
展开
-
【刷题第十一天】leetcode 475. 供暖器
题目:冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。在加热器的加热半径范围内的每个房屋都可以获得供暖。现在,给出位于一条水平线上的房屋 houses 和供暖器 heaters 的位置,请你找出并返回可以覆盖所有房屋的最小加热半径。说明:所有供暖器都遵循你的半径标准,加热的半径也一样。示例 1:输入: houses = [1,2,3], heaters = [2]输出: 1解释: 仅在位置2上有一个供暖器。如果我们将加热半径设为1,那么所有房屋就都能得到供暖。思路:原创 2021-08-12 23:35:26 · 378 阅读 · 0 评论 -
【刷题第十一天】leetcode413. 等差数列划分
题目:如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。给你一个整数数组 nums ,返回数组 nums 中所有为等差数组的 子数组 个数。子数组 是数组中的一个连续序列。思路:从数组的第一个元素开始遍历,判断以第一个元素开始的所有子数组是否为等差数列,首先计算出前两个元素的差,如果第三个元素和第二个元素的差相等,则等差数组的个数加一,遇到不相等的情况直接退出当前元素的原创 2021-08-10 23:47:24 · 229 阅读 · 0 评论 -
【刷题第十天】leetcode 167.. 两数之和 II - 输入有序数组
题目:给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。思路:做个遍历,因为题目假设只对应唯一的答案,所以遍历的时候判断和等于t原创 2021-08-10 00:09:21 · 234 阅读 · 0 评论 -
【刷题第九天】leetcode560. 和为K的子数组
题目:给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :思路:找出所有的连续子数组,依次计算和并且和k做比较,相等的则个数加一代码:public int subarraySum(int[] nums, int k) { int ans = 0; for (int i = 0; i < nums原创 2021-08-08 23:07:31 · 129 阅读 · 0 评论 -
【刷题第八天】leetcode187. 重复的DNA序列
题目:所有 DNA 都由一系列缩写为 ‘A’,‘C’,‘G’ 和 ‘T’ 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。示例 1:输入:s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”输出:[“AAAAACCCCC”,“CCCCCAAAAA”]思路:滑动窗口+hashmap滑动窗口生成对应的子串原创 2021-08-06 00:19:06 · 143 阅读 · 0 评论 -
【刷题第七天】leetcode611.有效三角形的个数
题目:给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。示例 1:输入: [2,2,3,4]输出: 3解释:有效的组合是:2,3,4 (使用第一个 2)2,3,4 (使用第二个 2)2,2,3思路一:要能构成三角形,需要保证任意两边之和大于第三边,那么可以对输入的数组先进行排序,这样只需要保证小的两边之和大于第三边即可。代码:public int triangleNumber(int[] nums) { Arrays.sort(nums原创 2021-08-05 00:15:51 · 380 阅读 · 0 评论 -
【刷题第六天】leetcode581.最短无序连续子数组
题目:给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。请你找出符合题意的 最短 子数组,并输出它的长度思路一:目的是让整个数组有序,那么我们可以先将数组拷贝一份进行排序,然后使用两个指针 ii 和 jj 分别找到左右两端第一个不同的地方,那么 [i, j][i,j] 这一区间即是答案。代码:class Solution { public int findUnsortedSubarray(int[] nums) {原创 2021-08-04 00:09:32 · 118 阅读 · 0 评论 -
【刷题第五天】leetcode720. 词典中最长的单词
题目给出一个字符串数组words组成的一本英语词典。从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成。若其中有多个可行的答案,则返回答案中字典序最小的单词。若无答案,则返回空字符串。思路:暴力解法,先排序,然后从数组倒序进行遍历,看其子串是否在前面出现过代码:public String longestWord(String[] words) { //对原数组中的元素排序 Arrays.sort(words); Str原创 2021-08-03 00:20:42 · 104 阅读 · 0 评论 -
【刷题第四天】leetcode1743. 从相邻元素对还原数组
题目:存在一个由 n 个不同元素组成的整数数组 nums ,但你已经记不清具体内容。好在你还记得 nums 中的每一对相邻元素。给你一个二维整数数组 adjacentPairs ,大小为 n - 1 ,其中每个 adjacentPairs[i] = [ui, vi] 表示元素 ui 和 vi 在 nums 中相邻。题目数据保证所有由元素 nums[i] 和 nums[i+1] 组成的相邻元素对都存在于 adjacentPairs 中,存在形式可能是 [nums[i], nums[i+1]] ,也可能是翻译 2021-07-30 00:22:55 · 193 阅读 · 0 评论 -
链表常见的面试题
1、从链表的末尾添加节点2、删除链表节点给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该节点如果用头指针开始遍历链表时间复杂度为O(n),要在O(1)的时间删除,需要得到被删除的结点的前一个结点,但是前一个结点很难获得,但是我们可以很方便的得到要删除的结点的下一个结点,如果我们把下一个结点的内容复制到需要删除的结点上覆盖原有的内容,在把下一个结点删除。代码实现:...原创 2018-09-01 17:30:55 · 432 阅读 · 0 评论 -
动态规划常见题
动态规划是运筹学的一个分支,是求解决策过程最优化的数学方法。利用各个阶段之间的关系,逐个求解,最终求的全局最优解。在设计动态规划算法时,需要确认原问题与子问题、动态规划状态、边界状态的值、状态转移方程等关键要素。爬楼梯(leetcode70)在爬楼梯时,每次可向上走1阶台阶或2阶台阶,问有n阶楼梯有多少种上楼的方式?由于每次最多爬2阶,楼梯的第i阶,只可能从第i-1阶与第i-2阶到达。...原创 2018-08-19 12:28:49 · 1961 阅读 · 1 评论