
算法
GoKu~
软件简单为美:正确优于速度, 简单优于复杂, 清晰优于机巧, 安全优于不安全。
展开
-
给植物浇水
5201. 给植物浇水难度中等0你打算用一个水罐给花园里的n株植物浇水。植物排成一行,从左到右进行标记,编号从0到n - 1。其中,第i株植物的位置是x = i。x = -1处有一条河,你可以在那里重新灌满你的水罐。每一株植物都需要浇特定量的水。你将会按下面描述的方式完成浇水:按从左到右的顺序给植物浇水。 在给当前植物浇完水之后,如果你没有足够的水完全浇灌下一株植物,那么你就需要返回河边重新装满水罐。 你不能提前重新灌满水罐。最初,你在河边(也就是,x =...原创 2021-11-21 16:16:35 · 252 阅读 · 0 评论 -
反转偶数长度组的节点
2074.反转偶数长度组的节点给你一个链表的头节点head。链表中的节点按顺序划分成若干非空组,这些非空组的长度构成一个自然数序列(1, 2, 3, 4, ...)。一个组的长度就是组中分配到的节点数目。换句话说:节点1分配给第一组 节点2和3分配给第二组 节点4、5和6分配给第三组,以此类推注意,最后一组的长度可能小于或者等于1 + 倒数第二组的长度。反转每个偶数长度组中的节点,并返回修改后链表的头节点head。示例 1:...原创 2021-11-17 21:40:23 · 128 阅读 · 0 评论 -
5914. 值相等的最小索引
5914. 值相等的最小索引给你一个下标从 0 开始的整数数组nums,返回nums中满足i mod 10 == nums[i]的最小下标i;如果不存在这样的下标,返回-1。x mod y表示x除以y的余数。class Solution {public: int smallestEqual(vector<int>& nums) { int len = nums.size(); int Min = I...原创 2021-10-31 20:21:46 · 242 阅读 · 0 评论 -
5915. 找出临界点之间的最小和最大距离
5915. 找出临界点之间的最小和最大距离链表中的临界点定义为一个局部极大值点或局部极小值点 。如果当前节点的值严格大于前一个节点和后一个节点,那么这个节点就是一个 局部极大值点。如果当前节点的值严格小于前一个节点和后一个节点,那么这个节点就是一个 局部极小值点。注意:节点只有在同时存在前一个节点和后一个节点的情况下,才能成为一个局部极大值点 / 极小值点。给你一个链表head,返回一个长度为 2 的数组[minDistance, maxDistanc...原创 2021-10-31 20:19:21 · 137 阅读 · 0 评论 -
间隔删除链表结点
给你一个链表的头结点head,每隔一个结点删除另一个结点(要求保留头结点)。请返回最终链表的头结点。示例 1:输入:head = [1,2,3,4]输出:[1,3]解释:蓝色结点为删除的结点示例 2:输入:head = [5,1,8,6,1]输出:[5,8,1]/** * Definition for singly-linked list. * struct ListNode { * int val; * ListN...原创 2021-10-29 20:53:33 · 230 阅读 · 1 评论 -
202. 快乐数
202. 快乐数编写一个算法来判断一个数n是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。 如果可以变为 1,那么这个数就是快乐数。如果n是快乐数就返回true;不是,则返回false。方法:哈希表class Solution {public: int getNum(int n){//取各个位上的单数平方之和 i...原创 2021-10-28 22:38:57 · 99 阅读 · 0 评论 -
349. 两个数组的交集
349. 两个数组的交集给定两个数组,编写一个函数来计算它们的交集。方法1:排序查找o(n^2)class Solution {public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { sort(nums1.begin(),nums1.end()); sort(nums2.begin(),nums2.end(.原创 2021-10-26 22:40:38 · 106 阅读 · 0 评论 -
383. 赎金信
383. 赎金信给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成。如果可以构成,返回true;否则返回false。(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符串中的每个字符只能在赎金信字符串中使用一次。)class Solution {public: bool canConstruct(string ranso...原创 2021-10-25 22:31:24 · 102 阅读 · 0 评论 -
242. 有效的字母异位词
学习下一阶段:哈希表类型题给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若s 和 t中每个字符出现的次数都相同,则称s 和 t互为字母异位词。示例1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false方法1:哈希表法class Solution {public: bool isAnagram(strin...原创 2021-10-24 21:38:50 · 83 阅读 · 0 评论 -
时间复杂度如何推算?
究竟什么是时间复杂度时间复杂度是一个函数,它定性描述该算法的运行时间。我们在软件开发中,时间复杂度就是用来方便开发者估算出程序运行的答题时间。那么该如何估计程序运行时间呢,通常会估算算法的操作单元数量来代表程序消耗的时间,这里默认CPU的每个单元运行消耗的时间都是相同的。假设算法的问题规模为n,那么操作单元数量便用函数f(n)来表示,随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,这称作为算法的渐近时间复杂度,简称时间复杂度,记为 O(f(n))。#什么是大O这里的原创 2021-10-07 10:50:15 · 1043 阅读 · 0 评论 -
五大常用算法
学习算法前,先了解一下五大常用算法,方便后续归类总结及练习,到达触类旁通的效果。一。分治算法:快速排序、归并排序、大整数乘法、二分查找、递归(汉诺塔)基本概念:把一个复杂的问题分成若干个相同或相似的子问题,再把子问题分成更小的子问题… , 知道最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。看上去有点类似Fork/Join框架,或map-reduce。排序算法中的快速排序、归并排序都是使用的分治算法。分治算法的适用场景:1)当问题规模缩小到一定的程度就可以很容易解决2)转载 2021-09-25 11:11:10 · 4141 阅读 · 0 评论