理想汽车

您所在的位置:网站首页 梦想测试题目 理想汽车

理想汽车

2023-09-17 17:13| 来源: 网络整理| 查看: 265

笔试算法题

1.用栈实现队列

这道题是很经典的题目了,比较简单,我们只需要对栈的特性和队列的特性分析即可。

思路:题目要求使用两个栈实现一个队列,而且只需要实现两个基本的操作,push和pop。我们可以使用一个栈来装队列的元素,直接进队;当要进行出队操作时,由于栈是先进后出,队列是先进先出,也就是我们需要出队的元素在栈底,那么就要使用另外一个栈,把原栈的元素逐一进新栈,那么新栈的栈顶元素就是原栈的栈底元素。 讲的有点啰嗦,看代码

class Solution { public: void push(int node) { stack1.push(node); } int pop() { if(stack1.empty()) return -1; while(!stack1.empty()){ stack2.push(stack1.top()); stack1.pop(); } int ret = stack2.top(); stack2.pop(); while(!stack2.empty()) { stack1.push(stack2.top()); stack2.pop(); } return ret; } private: stack stack1; stack stack2; };

2.翻转字符串II

思路:对于这道题,也是一道比较简单的题目。我们首先把整个字符串翻转,然后找出两端的需要再次翻转的中界点,接着翻转这两个子字符串就过掉了。 原本的子串[0,n-1] 和 [n,len] (len是字符串的长度,而n是需要移动的子串长度),整体翻转后就成了[0,len-n] [len - n + 1,len],翻转三次就能完成题目要求。

时间复杂度O(n) 空间复杂度O(1)

通过代码:

#include #include #include using namespace std; int main() { string s; int n; cin >> n >> s; int len = s.size(); reverse(s.begin(), s.end()); reverse(s.begin(), s.begin() + len - n); reverse(s.begin()+ len - n, s.end()); cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3