算法必刷题
算法必刷题 题目与答案详解
super码王
一直在努力,从未放弃!!!
展开
-
【70】爬楼梯问题求解
题目描述思路分析当阶数为 1 时 ,解法为 1当阶数为 2 时 ,解法为 2当阶数为 3 时 ,解法为 3当阶数为 4 时 ,解法为 5......很明显可以分析出:一下公式:代码实现:递归法class Solution { public int climbStairs(int n) { if(n == 1) return 1; if(n == 2) return 2; return climbS原创 2022-04-14 11:59:17 · 274 阅读 · 0 评论 -
【力扣】76. 最小覆盖子串
题目给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。注意对于t中重复字符,我们寻找的子字符串中该字符数量必须不少于t中该字符数量。 如果s中存在这样的子串,我们保证它是唯一的答案。示例示例 1:输入:s = "ADOBECODEBANC", t = "ABC"输出:"BANC"示例 2:输入:s = "a", t = "a"输出:"a"示例 3:输入: ...原创 2022-04-09 22:30:31 · 277 阅读 · 0 评论 -
力扣之水果成篮史上最全解法
题目连接904. 水果成篮 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/fruit-into-baskets/题目描述解题思路像这种求最大长度的问题,滑动窗口成了最热门的解法。所谓滑动窗口 ,在我看来其实就是左右两个指针,右指针负责遍历数据,左指针根据条件移动,目标长度 = 右指针 - 左指针 + 1有了上面的大局观,我们就来结合本题目好好用一下滑动窗口:定义一个右指针 right,使用它.原创 2022-03-28 12:06:43 · 912 阅读 · 0 评论 -
插入排序史上最经典的实现方式
插入排序的原理插入排序的代码实现循环法let arrayData = [44, 3, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48];let insertSort = (arr) => { //对于第0个元素 只有一个元素,所以没有比的必要,我们就从第1个元素开始 for (let i = 1; i < arr.length; i++) { //取出遍历到的元素原创 2022-03-18 19:18:41 · 504 阅读 · 0 评论 -
选择排序史上最经典实现方式
选择排序原理不得不说,选择排序和上一节我们讲的冒泡排序真的有点像,但是两者还是有点区别的,差别在于冒泡排序 是相邻元素进行比较,选择排序是选择一个基准,和其余的全部进行比较。代码实现双循环法let dataArr = [44, 3, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48]var selectSort = (data, len) => { //目标数组有 len 个元素,所以我们每个遍历数组中的每一个元素 进行..原创 2022-03-16 18:49:15 · 555 阅读 · 0 评论 -
冒泡排序史上最经典的实现
冒泡排序概念讲解简单点说,冒泡排序就是将大的数通过一步步比较放在右边,将小的数一步步放在左边。代码实现本代码不是最优代码,但是肯定是最容易理解的代码双层循环法var arry = [44, 3, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48]const bubblesort = function (arr) { //第一次需要排15个元素,第二次需要排序14个元素,所以从15个元素慢慢递减 15 14 ... f原创 2022-03-15 10:46:01 · 1241 阅读 · 0 评论 -
快速排序算法史上最经典实现
快速排序算法经典介绍快速排序算法实现原理图解第一步:第二步: 取出基准值第三步:先右指针往左遍历,遇到比基准值44小的就填补到左指针指向的位置第四步:左指针向右遍历,遇到比基准值大的就放到右指针指向的位置第五步:重复第三步和第四步,直到左右指针指向同一个位置,然后将基准值放入该位置第六步:第五步之后很明显得到了左右序列,下面只需要对左右序列递归即可。快速排序代码实现var arry = [44, 3, 38, 5, 47, 15, 36, 26, .原创 2022-03-08 22:48:18 · 341 阅读 · 0 评论 -
稀疏数组系列篇
基本介绍案例展示原理分析原创 2021-09-07 23:52:56 · 315 阅读 · 1 评论 -
计算机中为什么要用补码运算?
根据个人总结,其原因主要有以下三点:让符号位也能参与数值的计算,让计算规则更简单 让减法运算也能用加法表示,简化了硬件电路的设计 让0有统一的编码,因为 反码 和 原码中 +0 和 -0 编码格式不一样...原创 2021-08-29 13:14:33 · 755 阅读 · 0 评论 -
删除排序数组中的重复项
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。解题思路:双指针法题目链接:初级算法 -删除排序数组中的重复项java实现class Solution { public int removeDuplicates(int[] nums) { // 采用双指针法 //初始化左指针 ..原创 2021-07-26 13:04:43 · 218 阅读 · 0 评论 -
java必刷题——众数选三
题目需求分析解题思路获取用户输入的 N、D 存储用户输入的可用坐标点原创 2021-06-27 12:35:51 · 212 阅读 · 0 评论 -
java必刷题——正则表达式
题目需求分析解题思路获取用户输入的 需矫正字符总数; 根据用户输入的 总数 对错误字符进行矫正;技术栈java正则表达式代码实现package OpenClosedPrinciple;import java.util.Scanner;/** * ClassName: OpenCloseTest <br/> * Description: <br/> * date: 2021/6/19 20:56<br/> * * @au.原创 2021-06-26 22:19:44 · 306 阅读 · 0 评论