![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法入门
文章平均质量分 50
安*东
这个作者很懒,什么都没留下…
展开
-
LeetCode 刷题 (二)算法基础
二分查找思想的应用原创 2021-11-16 22:38:09 · 81 阅读 · 1 评论 -
LeetCode 刷题 (一)算法基础
34. 在排序数组中查找元素的第一个和最后一个位置 思路:在学习过数据结构与算法以后,几种常见的查找算法:顺序查找、二分查找、B树、分块查找、散列查找等等。通常情况下,我们选择则二分查找也就是折半查找就可以了,当然,如果题目给的数据结构非常切合某一特定算法也是可以考虑的。 二分查找的思想就是:基于原本的有序顺序,我们先与初始序列中间的元素比较,这样就可以当前元素的选择范围缩小一半。 class Solution { public: vector<int> sear...原创 2021-11-15 23:00:48 · 462 阅读 · 0 评论 -
LeetCode 刷题 (十) 算法入门 动态规划
70. 爬楼梯70. 爬楼梯70. 爬楼梯 假设你正在爬楼梯。需要n阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢 思路:很经典的动态规划。由于每次只能上一个或者两个台阶,所以你到达n阶台阶的方式只能是(1)从n-1阶上去;(2)从n-2阶上去。所以很容易得出转移方程:f(n) = f(n-1)+f(n-2); 所以我们这时就可以借助数学方法求数列通项了。但是没必要。我们只需要从n=0,n=1开始,每次记录两个数f(i-1)和f(i-2)即可; ...原创 2021-11-14 21:30:15 · 373 阅读 · 0 评论 -
LeetCode 刷题 (九)算法入门--回溯
77. 组合77. 组合77. 组合 给定两个整数n和k,返回范围[1, n]中所有可能的k个数的组合。 你可以按任何顺序返回答案。 思路: 如果解决一个问题有多个步骤,每一个步骤有多种方法,题目又要我们找出所有的方法,可以使用回溯算法; 回溯算法是在一棵树上的 深度优先遍历(因为要找所有的解,所以需要遍历); 为什么说是在一棵树上的深度优先遍历呢?比如说,你现在要解决一个问题,这个问题被分为了若干的步骤,对于每一个步骤都有多个方法到下一个步骤。(听君一席话,就是一席话,嘿嘿嘿...原创 2021-11-13 23:34:49 · 4223 阅读 · 1 评论 -
leetCode 刷题 (八)算法入门
994. 腐烂的橘子994. 腐烂的橘子994. 腐烂的橘子 思路:显然本题可以利用图的广度优先遍历,我们还是把所有腐烂的橘子想象成与一个超级起点相连的点,这样广度优先遍历就可以从一个起点出发。同时,用flag标记本轮是否有新鲜橘子被感染。记录腐烂次数,然后等广度优先遍历处理完后,检查是否还有未腐烂的橘子,如果没有,则返回次数,如果有,则表明有新鲜橘子四周没有腐烂橘子,永远不会腐烂。注意特殊情况:没有橘子、没有腐烂橘子。 class Solution { public: static cons原创 2021-11-12 20:36:10 · 4570 阅读 · 0 评论 -
LeetCode 刷题 (七)算法入门
542. 01 矩阵 给定一个由 0 和 1 组成的矩阵 mat,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 方法一:思路:首先,我们很容易理解,从每一个0开始去计算到不为0的dist,采用广度优先的遍历,第一轮被遍历到的就是1,从每一个0的位置开始依次BFS进行,然后取dist的最小值。不过如果0的个数较多,处理起来比较复杂。在思考一下,我们可以提升一下思维,我们可以假设一个BFS的起点(逻辑上存在),这个起点和矩阵中所.原创 2021-11-11 23:37:09 · 127 阅读 · 0 评论 -
leetCode 刷题 20天(六)算法入门
733.图像渲染733. 图像渲染 解题思路:本题非常简单,无论是用图的BFS广度优先还是DFS深度优先,都可以非常快捷的解决。 复习数据结构的小伙伴,可以用递归和非递归的方法都写一下,顺便复习了。 class Solution { public: void bfs(vector<vector<int>>& image, int sr, int sc, int newColor){ int oldColor = image[s...原创 2021-11-10 23:36:55 · 1257 阅读 · 0 评论 -
LeetCode 刷题 (五)(算法入门)
3.无重复字符最长子串 3. 无重复字符的最长子串----LeetCode 方法一: 锻炼一下自己的注释,可能有点啰嗦。嘿嘿嘿~~~ 思路:每次添加一个字符到最长无重复串中,用 i,j标记该子串的首尾,然后遍历一遍去判断当前加入子串的元素有没有重复,如果重复,找到重复的位置,并更新子串首部。 class Solution { public: //返回重复元素的位置,x表示当前最长子串的首部,y表示当前要加入最长子串的元素 int Pos(string s,int x, int .原创 2021-11-08 23:22:52 · 632 阅读 · 0 评论 -
leetCode 刷题 算法入门20天(四)
题目链接: 876. 链表的中间结点 解题思路:比较简单,快慢指针;p,q两个指针;初始p,q指向头结点;p每次移动1位,q每次移动2位;当q访问到链表尾部时,p刚好到链表中间; class Solution { public: ListNode* middleNode(ListNode* head) { //快慢指针 p每次前进一个位置,q每次前进两个位置 ListNode *p=head,*q=head; while(q->next!=原创 2021-11-05 23:13:13 · 383 阅读 · 0 评论 -
leetCode 刷题 (三)
344.反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1: 输入:s = ["h","e","l","l","o"] 输出:["o","l","l","e","h"] 示例 2: 输入:s = ["H","a","n","n","a","h"] 输出:["h","a","n","n","a","H"] 提示: 1 <=.原创 2021-11-04 21:34:38 · 76 阅读 · 0 评论 -
leetCode 刷题 (算法入门 (二))
283.移动零 题目描述: 给定一个数组nums,编写一个函数将所有0移动到数组末尾,同时保持元素相对顺序不变。 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。 (来源:LeetCode) 方法一: 顺序遍历nums数组,用zero记录0元素的个数。如果当前元素为0,zero增加1;如果当前元素非0,且zero不为0,则当前元素向前移动zero个位置,同时将...原创 2021-11-03 21:41:20 · 73 阅读 · 0 评论 -
LeetCode 刷题 (算法入门)
一、有序数组的进阶 方法三:双指针法 利用双指针,left和right从数组两端向中间遍历,每次将对应元素平方后比较大的值逆序存放在数组中 class Solution { public: vector<int> sortedSquares(vector<int>& nums) { int n = nums.size(); vector<int> ans(n);//初始化一个大小为n的数组 for (原创 2021-11-03 11:00:00 · 147 阅读 · 0 评论 -
leetcode 刷题(算法入门)
一、有序数组的平方 997题 给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序 示例 1: 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100] 排序后,数组变为 [0,1,9,16,100] 示例 2: 输入:nums = [-7,-3,2,3,11] 输出:[4,9,9,49,121] 来源:力扣(LeetCode...原创 2021-11-02 20:59:35 · 240 阅读 · 0 评论