2019腾讯的面试题

2019腾讯的面试题1.删除字符串s1中在字符串s2中出现的字符。基本思路:把s1的字符存到一个set里面,然后遍历s2,看是否出现过,出现过就erase掉。但是直接输出set的元素这样会改变顺序,要想顺序不变,就顺序遍历一下s1看是否出现,出现就输出。2.有序链表合并LeetCode原题:递归解决,终

大家好,欢迎来到IT知识分享网。2019腾讯的面试题"

1.  删除字符串s1 中在字符串s2 中出现的字符。

   基本思路:把s1的字符存到一个set里面,然后遍历s2,看是否出现过,出现过就erase掉。但是直接输出set的元素这样会改变顺序,要想顺序不变,就顺序遍历一下s1 看是否出现,出现就输出。

#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <vector> #include <set> #include <queue> #include <map>
using namespace std; typedef long long LL; const int maxn=1005; set<char>s; int main() { string s1,s2; cin>>s1>>s2; int len=s1.length(); for(int i=0;i<len;i++) s.insert(s1[i]); len=s2.length(); for(int i=0;i<len;i++) { if(s.count(s2[i])) s.erase(s.find(s2[i])); } len=s1.length(); for(int i=0;i<len;i++) { if(s.count(s1[i])) cout<<s1[i]; } cout<<endl; return 0; }

2.  有序链表合并

   LeetCode原题:递归解决,终止条件:l1为空或者l2位空(同时为空已经在l1那里判断了)

   l1的值比较小或者两个值相等,就把l1->next和l2合并,放进l1->next,返回l1;

   l2的值比较小,就把l1和l2->next合并,放进l2->next,返回l2;

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */
class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if (l1 == NULL) { return l2; } else if (l2 == NULL) { return l1; } else { if (l1->val <= l2->val) { l1->next = mergeTwoLists(l1->next, l2); return l1; } else { l2->next = mergeTwoLists(l1, l2->next); return l2; } } } };

3.  二叉树中和为某一值的路径、

   剑指Offer 题,从树的根节点开始一直到叶子结点所经过的结点形成一条路径也就是说每条满足条件的路径都是以根节点开始,叶子结点结束,如果想得到所有根节点到叶子结点的路径(不一一定满足和为某整数的条件),需要遍历整棵树,还要先遍历根节点,所以采用先序遍历。在这个过程中判断路径和,每访问一个节点,我们都把当前节点保存到路径中。而且每次当从子节点回到父节点的时候,我们都需要在路径上删除子节点。

class Solution { public:
    vector<vector<int>> res; vector<int> path; vector<vector<int> > FindPath(TreeNode* root,int expectNumber) { find(root,expectNumber); return res; } void find(TreeNode* root,int sum){ if(root == NULL){ return; } path.push_back(root->val); if(!root->left && !root->right && sum == root->val){ res.push_back(path); } else{ if(root->left){ find(root->left,sum - root->val); } if(root->right){ find(root->right,sum - root->val); } } path.pop_back(); } };

4.  给定整数数组a,O(n)时间求a[i] & a[j] 最大值

   暂时没啥思路。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/33429.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信