找工作网站哪个比较好wordpress 小工具 位置
找工作网站哪个比较好,wordpress 小工具 位置,宁波住房和城乡建设网,南海最新军事今天记录了3道题#xff0c;难度范围#xff1a;★★~★★★★。前两道题还是哈希表/哈希集合的使用#xff0c;第三题是共同体的使用。
今天终于开始继续敲代码了#xff0c;前几天在复习完成一个大作业#xff0c;熬到3点#xff0c;真敲不动#xff0c;但是现在有空…今天记录了3道题难度范围★★~★★★★。前两道题还是哈希表/哈希集合的使用第三题是共同体的使用。今天终于开始继续敲代码了前几天在复习完成一个大作业熬到3点真敲不动但是现在有空了虽然还有3门考试2个实验但课程基本都结束了还是大大滴有时间的所以续上练题计划一.罗马数字转整数 ★★☆☆☆题目13. 罗马数字转整数思路11.将基础的罗马数字存在哈希表中并创建一个数组num存放对应的数值2.遍历字符串的每一个字符遇到特殊情况特殊处理——加上对应数值将两个字符看作一个所以 i2反之直接加上对应的数值即可。代码class Solution { public: int romanToInt(string s) { //罗马数字数组 string luomaIVXLCDM; int num[]{1,5,10,50,100,500,1000}; //创建哈希表保存 unordered_mapchar,int map; for(int i0;i7;i){ char chluoma[i]; //将基础罗马数字放入哈希表 map.insert({ch,i}); } //遍历字符串 int lens.size(); int res0; int i0; while(ilen){ //获取字符串各个字符 char chs[i]; if(chI ilen-1){ if(s[i1]V) { res4; i2; continue; } if(s[i1]X) { res9; i2; continue; } } else if(chX ilen-1){ if(s[i1]L) { res40; i2; continue; } if(s[i1]C) { res90; i2; continue; } } else if(chC ilen-1){ if(s[i1]D) { res400; i2; continue; } if(s[i1]M) { res900; i2; continue; } } //存在哈希表对应索引 int indexmap[ch]; //结果加上对应数字 resnum[index]; i; } return res; } };复杂度时间复杂度O(n)。将罗马数字用循环存入哈希表循环次数为7计算结果的循环次数最多为字符串长度设为n所以时间复杂度为O(1)O(n)O(n)空间复杂度O(1)。数组长度为7哈希表长度为7所以空间复杂度为O(1)O(1)O(1)思路2基于思路1的改进1.充分利用哈希表存储罗马数字和对应数值2.对特殊情况的处理理解为当 当前字符对应的数值 小于 后一个字符对应的数值 时结果减去当前字符对应的数值即可后一个字符对应的数值正常处理。代码class Solution { public: int romanToInt(string s) { //1.创建哈希表保存:罗马数字和对应数值 unordered_mapchar,int map{ {I,1}, {V,5}, {X,10}, {L,50}, {C,100}, {D,500}, {M,1000} }; //遍历字符串 int lens.size(); int res0; for(int i0;ilen;i){ if(ilen-1 map[s[i]]map[s[i1]]){ res-map[s[i]]; }else{ resmap[s[i]]; } } return res; } };复杂度时间复杂度O(n)。循环次数为nn为字符串长度空间复杂度O(1)。变量哈希表只存储7 个固定的键值对占用的空间都是常数级所以最后两者相加还是常数级二.环形链表 ★★★☆☆题目141. 环形链表给你一个链表的头节点head判断链表中是否有环。如果链表中有某个节点可以通过连续跟踪next指针再次到达则链表中存在环。 为了表示给定链表中的环评测系统内部使用整数pos来表示链表尾连接到链表中的位置索引从 0 开始。注意pos不作为参数进行传递。仅仅是为了标识链表的实际情况。如果链表中存在环则返回true。 否则返回false。这道题我试图用哈希表的方式求解最后没有解除了所以看了官方题解发现哈希集合就能解决问题。官方题解——思路1哈希集合首先解释链节点的结构体ListNode。val表示节点的值next是一个ListNode类型的指针指向下一节点。利用哈希集合无重复数据的特点将链表节点依次放入哈希集合若在哈希集合中找到了该结点说明所属链表是环形链表返回true反之将该结点加入哈希表中。注意这道题的哈希集合类型设为ListNode*因为函数的参数就是ListNode*类型的头结点通过不断移动头结点不断放入哈希表已经不断的判断就能得出结论。代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool hasCycle(ListNode *head) { //用哈希集合保存以访问的节点 unordered_setListNode* seen; while(head!NULL){ if(seen.find(head)!seen.end()){ //seen.count() return true; } seen.insert(head); headhead-next; } return false; } };官方题解——思路2快慢指针个人感觉快慢指针跟双指针有一点相似——通过两个指针的区别/差异判断这里的快慢指针均设为ListNode类型通过模拟“龟兔赛跑”让快指针每次移动两步慢指针每次移动一步如果是环形链表那么快指针最后移动会“追上”慢指针实际是套圈再次和慢指针相遇。假定快慢指针的起始位置分别是head-nexthead。为什么不能同时从head出发——因为后面判断是否是环形链表的条件就是快慢指针是否相遇即快慢指针是否相等所以不能从同一位置出发。而此处的head-nexthead可以理解为快慢指针实际从head头结点的前一个“虚结点”一起出发两者都移动了一次只是快指针走了两步到head-next慢指针走了一步到head。1.判断head和head-next是否为空根据快慢指针的初始值知道我们首先要判断head和head-next是否为空才能进行赋值所以在一开始就进行判断如果一方是就直接返回false也可以理解为根据链表头结点判断链表长度是否为0/1如果头结点为空说明链表长度为0如果头结点的下一节点为空说明链表长度为1不可能是环形链表。2.在while循环内移动指针因为fast走得更快所以如果链表不是环形链表那么fast或者fast-next可以为空此时可以直接返回false除此之外移动slow和fast。循环直到slowfast说明slow被fast套圈了即两者相遇了说明链表是环形链表返回true。代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool hasCycle(ListNode *head) { //链表为空 / 链表长度为1 if(headNULL || head-nextNULL){ return false;//不是环形链表 } //设定快慢指针并初始化 ListNode* slowhead; ListNode* fasthead-next; while(slow!fast){ //当快指针追上慢指针时说明链表是环形链表 //如果快指针已经/即将为空说明链表不是环形链表 if(fastNULL || fast-next NULL){ return false; } //移动两个指针 slowslow-next; fastfast-next-next; } return true; } };复杂度时间复杂度O(n)。需要分析两种情况无环和有环。无环则循环次数等于快指针移动次数快指针最多移动n/2次所以时间复杂度为O(n)有环需要分为两个阶段——指针进入环之前和快指针在环内追上慢指针。空间复杂度O(1)。指针变量空间是常数级与链表节点数n无关。三.判断系统的大小端 ★★★★☆题目判断当前系统是大端还是小端我自己做的时候丝毫没有思路也没有去问豆包而且有一种只要我放弃一次后面再有精力也不想做这道题的感觉不行不行这万万不行下面给出老师的思路思路利用共同体共享同一片空间的特点解决这道题下面是两种不同的做法1.创建一个共同体创建一个int类型数据a并初始化为0x12345678再创建一个char类型变量b通过b的值就能判断系统是大端还是小端。如果系统是大端高位数字存储在低地址低位数字存储在高地址所以b的值是0x12反之如果系统是小端b的值是0x78。2.创建一个int类型数据a并初始化为0x12345678再创建一个char*类型变量p使其指向a的地址通过查看p所指地址的值就能判断结果。代码typedef union Data { int a; char b; }Data; int main() { Data data; data.a 0x12345678; if (data.b 0x78) { printf(小端模式\n); } else { printf(大端模式\n); } return 0; }int main() { int a 0x12345678; char* p (char*)a; if (*p 0x78) { printf(小端模式\n); } else { printf(大端模式\n); } return 0; }