技术笔记:pintia_L1_20题目集合

简介: 技术笔记:pintia_L1_20题目集合

pintia_L1_20题目集合 - sakuzeng - 博客园


#home :not(.cnblogs_code):not(.cnblogs_Highlighter)>pre:not(【highlighted】):not(【class="brush:"】) code:not(.hljs), :not(.cnblogs_code):not(.cnblogs_Highlighter)>pre:not(【highlighted】):not(【class="brush:"】) code:not(.hljs) {background: rgb(245, 245, 245);


padding: 12px;


border: 1px solid rgb(204, 204, 204);


border-radius: 3px;


border-color: transparent;


color: rgb(68, 68, 68);


font-family: "Courier New", sans-serif;


font-size: 12px


var currentBlogId = 746108;


var currentBlogApp = 'sakuzeng';


var isLogined = false;


var isBlogOwner = false;


var skinName = 'darkgreentrip';


var visitorUserId = '';


var hasCustomScript = false;


window.cb_enable_mathjax = true;


window.mathEngine = 0;


window.codeHighlightEngine = 1;


window.enableCodeLineNumber = false;


window.codeHighlightTheme = 'cnblogs';


window.darkModeCodeHighlightTheme = 'vs2015';


window.isDarkCodeHighlightTheme = false;


window.isDarkModeCodeHighlightThemeDark = true;


window.isDisableCodeHighlighter = false;


window.enableCodeThemeTypeFollowSystem = false;


window.enableMacStyleCodeBlock = false;


window.currentPostId = 16132470;


window.currentPostDateAdded = '2022-04-18 22:03';


.medium-zoom-overlay {


position: fixed;


top: 0;


right: 0;


bottom: 0;


left: 0;


opacity: 0;


transition: opacity 300ms;


will-change: opacity;


}


.medium-zoom--opened .medium-zoom-overlay {


cursor: pointer;


cursor: zoom-out;


opacity: 1;


}


.medium-zoom-image {


cursor: pointer;


cursor: zoom-in;


/


The transition is marked as "!important" for the animation to happen


even though it's overriden by another inline transition style attribute.


This is problematic with frameworks that generate inline styles on their


images (e.g. Gatsby).


See


/


transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) !important;


}


.medium-zoom-image--hidden {


visibility: hidden;


}


.medium-zoom-image--opened {


position: relative;


cursor: pointer;


cursor: zoom-out;


will-change: transform;


}


会员


众包


新闻


博问


闪存


云市场


所有博客


当前博客


我的博客


我的园子


账号设置


简洁模式 ...


退出登录


注册


登录


sakuzeng


博客园


首页


新随笔


联系


订阅



管理


随笔 - 16


文章 - 0


评论 - 0


阅读 -


1880


pintia_L1_20题目集合


旨在理清思路和整理遗忘的点


这次的刷题大部分是二刷,只是把思路总结,还有遗忘的常用的函数用法归纳出来


题目


N个数求和


这道题主要应用结构体进行分数的化简,以及gcd。第二次作题我把整数部分在每次每次相加的时候都单独算出来在结构体当中存储,看了之前的代码猜想起来把整数部分放到最后区计算显然是比较明智的。之前我还在相加之前把每个和数进行了化简,也比较可取。唯一我感觉不太完善的部分是最后整除的时候如果分母是负数,对结果的影响,在第二次作的时候我先计算的绝对值,再分别取相反数。


A-B


主要考察了stl中string类中find函数的使用。以及未找到时候的判断与string:npos进行判断


参考博客


贼清楚,我还自己测试了下是否正确。我以前一直用== -1来判断是否查找到,一直都用错了。但其实主要是由于-1在计算机内以补码形式存储,它和无符号长整型的最大值有着一样的二进制数。现在我认为把-1赋值给string::npos,纯粹为了简单。(static const size_t npos = -1)


#include


#include


using namespace std;


int main(){


string s = "Alice Bob Charlie";


size_t position;


position = s.find("none");


//static const size_t npos = -1;


printf("%lu", position);


if(position >= 0){


cout [ " Found" [ endl;


}


else{


cout [ "Not" [ endl;


}


printf("%lu", size_t(-1));


return 0;//代码效果参考:http://www.jhylw.com.cn/472329019.html


}


帅到没朋友


主要利用set来进行标记,然后利用algorithm中的count判断是否已经输出过。最后需要注意的是最后数据的输出格式"%05d"。


输出GPLT


主要是思维的变换,记得我第一次做的时候是想把每个字符个数统计出来,以其中最小的个数输出GPLT,然后再输出别的,真的是很傻。我完全可以把GPLT的个数分别单拿出来,输出一次就自减,当减到0就停止输出这个数。


出租


int findd(int a, int b, int n){


bool flag = false;


int l = 0, r = n -1;


int mid;


while(l <= r){


mid = (l + r) / 2;


if(a【mid】 > b){


l = mid + 1;


}


else if(a【mid】 < b){


r = mid - 1;


}


else{


flag = true;


break;


}


}


return flag ? mid : -1;


}


经过测试,好像写不写二分对这道题的时间没有啥影响,都是4ms,(数据很小)只有当利用algorithm中的find的时候变成了3ms。(也是偶然,因为find并没有优化只是逐个对比,所以当自己懒的写纯粹的比较查找时可以考虑find


find


需要包含头文件


InputIterator find (InputIterator first, InputIterator last, const T& val);//函数原型


LeftPad


这道题纯粹使用string类进行求解加以判断就行。需要注意的是当用getline()函数读入一行字符串时,需要把前面scanf处理剩余的'\n'用getchar()处理掉,后边字符串处理经常遇到。


古风排版


这道题对我来说让我想起了声明数组时给数组赋初值char ch【122】 = {' '}这种仅仅是把ch【0】 = ' //代码效果参考:http://www.jhylw.com.cn/493630129.html

',我以前误以为时把所有的都赋值成一样的了。老老实实写循环赋值。

敲笨钟


这道题让我直到了只要把字符串读进来,想怎么玩就怎么玩。只需要依据题设进行处理输出。


猜数字


这道题更是有意思了,自己没有考虑全,却因为测试用例没有而通过了,也提醒了自己以后真正应该关注的时算法的正确性,而不是简简单单的ac.


错误主要是对lower_bound,upper_bound的用法记忆错误。


他们都是在左闭右开的区间内寻找符合的值,lower_bound是返回第一个大于等于目标值的迭代器,upper_bound是返回第一个大于目标值的迭代器。也就是说如果没有目标值的话,我们可以利用返回值进行插入而使得数据依旧有序。在部分题中贼有用。


阅览室


这道题我的思路是利用map来存储每本书的借书时间,然后在还书的时候更新借书数量和总的阅读世界。一个需要注意的是,在还书之后要把对应的书从map中删除,因为一天中可能会有多个人借同一本书。


本来我想的是用visit数组来表示,-1表示未借,1表示已借,0表示归还,最后遍历一遍visit数组得到结果,因为有上述情况显然不成。


整除光棍


第一眼看到这道题真是无从下手,但看到示例后肯定不能单纯的试。在看了题解之后才拓宽了我的思路,他只是要结果,还有被除数都是1**,完全可以模仿除法的运算,因为每次补齐的位置都是1,这样就可以得出结果,第一次需要把寻找合适的1的个数使能够被除数除到。


天梯赛座位分配


这道题我第一次在摸底测试中并没有做出来,现在看原来的代码也有点看不懂。在这次做这道题中,我使用了队列数组来存储每个队伍队员的编号,每次顺次将编号入到相应的队列中,需要注意的是当只有一个队伍没有分配够时跳出循环,自己在以隔2的入队。最后注意输出格式的控制就没问题。这道题还是有点启发的,其实从题目的描述中就可以感觉到用队列应该会比较好做,但是第一次作的时候太着急(老师把这道题放到了第一道题的位置qwq)


前世档案


这道题刚开始有点蒙,但仔细一想,他其实就是叶子节点的编号,对于每次y,n就相当于一次选择,选择是走左边,还是走右边,走左边他的起始编号还是从1开始,而走右边他的起始编号就变成了当前他所在树所拥有的最大的叶子节点/2 + 1,这样迭代下去,最后他一定会进入叶子节点,而此时我们的index下标也已经计算完毕。


刮刮彩票


这道题唯一需要的就是把未知的数给填补出来,这需要读入的时候记录下已经有了的数字,之后再遍历一边确定。随后就是简单的输入输出,自己定义全局数组来存储已知数来输出。

相关文章
|
1月前
|
人工智能
【LeetCode-每日一题】-1014. 最佳观光组合
【LeetCode-每日一题】-1014. 最佳观光组合
|
23天前
|
存储
初阶编程题积累(3)——最接近的三数之和(题目描述、示例、题目思路、题解、解析)
初阶编程题积累(3)——最接近的三数之和(题目描述、示例、题目思路、题解、解析)
13 0
|
7月前
LeetCode刷题之 存在重复元素(题目分析➕源代码)
LeetCode刷题之 存在重复元素(题目分析➕源代码)
|
7月前
|
存储 算法
【AcWing算法基础课】第二章 数据结构(部分待更)(1)
e数组存储每个结点的值,ne数组存储每个结点的指向的下一个结点。
59 0
|
7月前
|
存储 算法 C++
【AcWing算法基础课】第二章 数据结构(部分待更)(3)
路径压缩:查找时,如果还没有找到目标值的父结点时,将路径上每个点的父结点,在向上寻找过程中更新记录。
64 0
|
7月前
|
存储 算法
【AcWing算法基础课】第二章 数据结构(部分待更)(2)
给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。
57 0
|
算法
动态规划编程题集合(leetcode)
动态规划编程题集合(leetcode)
|
算法
回溯算法编程题集合(leetcode)
回溯算法编程题集合(leetcode)
数据结构一个小白的练级之路【链表的分割】题目参考
数据结构一个小白的练级之路【链表的分割】题目参考
|
存储 算法 Java
Leetcode数组专题专练:经典题目+思路解读
Leetcode数组专题专练:经典题目+思路解读