
算法笔记
miss writer
我也可以成为大佬,为世界开源做贡献。冲!!!
展开
-
走迷宫变体【拼多多1面0905】
有一个N*M的迷宫,主角被放在随机的位置上,给你一个函数,控制主角逃离迷宫。可以使用的函数:int move(String direction) (//direction代表上下左右四个方向,分别是“U"、“D"、“L"、“R"//返回值有3种,包括-1、0、1;-1表示前面是陷阱或墙,主角不能往前走,会留在原地;0表示迷宫出口,恭喜成功逃离;输出:若找到出口,则移动到出口位置并输出”Y”;若没有可逃离的路线,则输出”N"。这里我事后考虑是这样解的,还有个问题是如何判断走回头路?原创 2024-09-05 22:18:10 · 331 阅读 · 1 评论 -
力扣170【交易逆序对的总数】
在股票交易中,如果前一天的股价高于后一天的股价,则可以认为存在一个「交易逆序对」。请设计一个程序,输入一段时间内的股票交易记录 record,返回其中存在的「交易逆序对」总数。解释:交易中的逆序对为 (9, 7), (9, 5), (9, 4), (9, 6), (7, 5), (7, 4), (7, 6), (5, 4)。两两归并到四四归并,这个过程就可以用来记录逆序数。这题不看题解真没想到用归并排序的原理做,说明对于归并排序没有真正意义的理解。输入:record = [9, 7, 5, 4, 6]原创 2024-08-05 20:02:45 · 340 阅读 · 0 评论 -
力扣41【缺失的正数】
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。原创 2024-08-05 12:09:54 · 369 阅读 · 0 评论 -
力扣287【寻找重复数】
给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。假设 nums 只有 一个重复的整数 ,返回 这个重复的数。脑子不好使了,只能这样解决了!原创 2024-08-04 20:54:32 · 269 阅读 · 0 评论 -
力扣240【搜索二维矩阵2】
右上角元素是所在行的最大值:如果目标值大于右上角的元素,那么目标值肯定不在当前行,因此我们可以向下移动到下一行。编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。右上角元素是所在列的最小值:如果目标值小于右上角的元素,那么目标值肯定不在当前列,因此我们可以向左移动到前一列。比较好玩的一题,上来一下被吓到了,找不出规律。看了题解,还真有规律,其实本质还是一种二分查找,只是比较值并不是中点,而是矩阵的右上角,为什么呢?每列的元素从上到下升序排列。原创 2024-08-04 16:08:45 · 221 阅读 · 0 评论 -
力扣134【加油站】
给定两个整数数组 gas 和 cost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。如果存在解,则 保证 它是 唯一 的。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。原创 2024-07-31 11:42:03 · 165 阅读 · 0 评论 -
力扣376【摆动序列】
求最长摆动序列时:当求up[3]时,由于3 > 2,可知up[3]只能=up[2]或者down[2]+1中选最大的;而求up[4]时,由于2<3,up[4]=up[3]相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。有序列:1 2 3 2。原创 2024-07-30 19:36:20 · 706 阅读 · 0 评论 -
力扣402【移掉k位数字】
给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。思路:维护一个递增的单调栈,保证栈内元素从头到尾是增加的;原创 2024-07-30 12:01:42 · 237 阅读 · 0 评论 -
力扣227【基本计算器】
你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。这题跟上一个题很像,但由于我想用Deque,对出队的函数不熟悉导致一直没排查到bug。s 由整数和算符 (‘+’, ‘-’, ‘*’, ‘/’) 组成,中间由一些空格隔开。注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval()。给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。表达式中的所有整数都是非负整数,且在范围 [0, 231 - 1] 内。原创 2024-07-26 16:32:35 · 248 阅读 · 0 评论 -
力扣224【基本计算器】
注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval()。‘+’ 不能用作一元运算(例如, “+1” 和 “+(2 + 3)” 无效)‘-’ 可以用作一元运算(即 “-1” 和 “-(2 + 3)” 是有效的)给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。s 由数字、‘+’、‘-’、‘(’、‘)’、和 ’ ’ 组成。每个数字和运行的计算将适合于一个有符号的 32位 整数。输入中不存在两个连续的操作符。s 表示一个有效的表达式。原创 2024-07-25 19:25:17 · 380 阅读 · 0 评论 -
力扣138【随机链表的复制】
解决方法:关键就是解决深拷贝代码的random指针,根据原链表的位置去找新链表的相对位置,这里要么用map记录索引位置去找;这题比较难的是理解题意:中文翻译过来比较难理解,实际上就是深拷贝一个链表,(这个链表多一个random属性,它指向链表某个节点),深拷贝的这个链表也必须有这种结构关系!指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。原创 2024-07-24 21:26:46 · 334 阅读 · 0 评论 -
力扣725【分隔链表】
给你一个头结点为 head 的单链表和一个整数 k ,请你设计一个算法将链表分隔为 k 个连续的部分。每部分的长度应该尽可能的相等:任意两部分的长度差距不能超过 1。这可能会导致有些部分为 null。这 k 个部分应该按照在链表中出现的顺序排列,并且排在前面的部分的长度应该大于或等于排在后面的长度。一道综合性比较强的题,主要考察对链表的使用。返回一个由上述 k 部分组成的数组。原创 2024-07-23 16:35:47 · 309 阅读 · 0 评论 -
力扣86【分割链表】
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当 保留 两个分区中每个节点的初始相对位置。最近在速刷算法题:刷题链接如下。原创 2024-07-23 15:51:40 · 355 阅读 · 0 评论 -
洛谷 P1161 开灯
题目[https://www.luogu.com.cn/problem/P1161?contestId=62094]题解:#include <bits/stdc++.h>using namespace std;int s[2000001]={0}; //这里定义放在main里面就错了int main(){ int n; double a[n+1]; int t[n+1]; for(int i=1;i<=n;i++) scanf("%lf%d",&a[i],原创 2022-02-14 23:48:12 · 654 阅读 · 1 评论 -
P5723 质数口袋
题目描述小 A 有一个质数口袋,里面可以装各个质数。他从 2 开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋。口袋的负载量就是口袋里的所有数字之和。但是口袋的承重量有限,不能装得下总和超过100000的质数。给出 LL,请问口袋里能装下几个质数?将这些质数从小往大输出,然后输出最多能装下的质数个数,所有数字之间有一空行。输入格式一行一个正整数 L。输出格式将这些质数从小往大输出,然后输出最多能装下的质数个数,所有数字之间有一空行。#include <stdio.h&g原创 2022-02-11 23:35:09 · 303 阅读 · 0 评论 -
算法笔记PAT:B1019 数字黑洞
****加粗样式给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。输入格式:输入给出一个 (0,104) 区间内的正整数 N。输出格式:如果 N 的 4 位数字全相等,则在一行内输出 N - N = 0000;否则将计算的每一步在一行内输出,直到 6174 作为差出现,输出格式见样例原创 2022-02-05 21:18:27 · 217 阅读 · 0 评论 -
贪心算法找零钱
题目描述小智去超市买东西,买了不超过一百块的东西。收银员想尽量用少的纸币来找钱。纸币面额分为50 20 10 5 1 五种。请在知道要找多少钱n给小明的情况下,输出纸币数量最少的方案。 1<=n<=99;输入有多组数据 1<=n<=99;输出对于每种数量不为0的纸币,输出他们的面值数量,再加起来样例输入2532样例输出20*1+5*120*1+10*1+1*2#include <iostream>#include<algorithm&g原创 2022-01-29 21:32:15 · 1660 阅读 · 0 评论 -
借鉴别人的代码讲一下八皇后问题
心得:这个八皇后问题一直困惑了很久,看到这篇文章对我帮助很大,一定要理解的是判断两个皇后是否冲突的条件,也就是要放置的皇后行与前一行皇后差的绝对值与列与前一个皇后列差的绝对值是否相等,这个一定要想明白。之后就是递归的实现,作者代码说的很详细,就不追叙了。#include <cstdio>#include <iostream>#include <cmath> #include <algorithm>using namespace std;/*转载 2022-01-26 23:37:42 · 129 阅读 · 0 评论 -
10个整数分奇偶排序
题目描述输入10个整数,彼此以空格分隔。重新排序以后输出(也按空格分隔),要求:1.先输出其中的奇数,并按从大到小排列;2.然后输出其中的偶数,并按从小到大排列。输入任意排序的10个整数(0~100),彼此以空格分隔。输出可能有多组测试数据,对于每组数据,按照要求排序后输出,由空格分隔。样例输入0 56 19 81 59 48 35 90 83 7517 86 71 51 30 1 9 36 14 16样例输出83 81 75 59 35 19 0 48 56 9071 51 17原创 2022-01-23 14:00:38 · 1213 阅读 · 1 评论 -
递增单链表去重复元素
#include<iostream>using namespace std;//根据一个递增的整数序列构造有序单链表,删除其中的重复元素struct node{ int data; node *next;};node * Create(int a[],int n){ node *head=new node; node *q; for(int i=0;i<n;i++){ node *p=new node; if(i==0) head->nex原创 2022-01-20 21:13:39 · 831 阅读 · 0 评论 -
逆置单链表
#include <iostream>using namespace std;//根据一个整数序列构造一个单链表,然后将其反转。//例如:原单链表为 2 3 4 5 ,反转之后为5 4 3 2struct node{ int data; node *next;}; node * reverse(node *head){ node *p=head->next; node *q=p->next; while(q!=NULL){ p->next=q原创 2022-01-20 19:47:26 · 785 阅读 · 0 评论