位置: IT常识 - 正文
推荐整理分享20230420-上海广策信息技术笔试记录(上海广为),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:上海策广餐饮有限公司,上海广岑投资中心(有限合伙),上海广宣,上海广敞网络科技有限公司,上海广敞网络科技有限公司,上海广宣,上海广敞网络科技有限公司,上海广敞网络科技有限公司,内容如对您有帮助,希望把文章链接给更多的朋友!
LC的简单题,不知道为什么一直有3道用例错,枯了。
bool isValid(string s) { stack<int> st; for(int i = 0; i < s.size(); i++){ // prevent cases like '))' if(st.empty()){ st.push(s[i]); } else if(s[i] == '{' || s[i] == '[' || s[i] == '('){ st.push(s[i]); } else if(!st.empty() && s[i] == '}' && st.top() == '{'){ st.pop(); } else if(!st.empty() && s[i] == ')' && st.top() == '('){ st.pop(); } else if(!st.empty() && s[i] == ']' && st.top() == '['){ st.pop(); } else{ return false; } } return st.empty(); }2.统计n的阶乘结果末尾0的个数想法:两步,一.实现大数乘法,二.通过阶乘乘法求出阶乘结果字符串,然后遍历统计字符串末尾0的个数。
然而暴力解法肯定过不了,不过当时大数乘法几个月没写了,唉。。。
先放个大数乘法的实现吧:
string multiply(string num1, string num2) { if(num1 == "0" || num2 == "0") return "0"; vector<int> res(num1.size() + num2.size(), 0); for(int j = num2.size() - 1; j >= 0; j--){ for(int i = num1.size() - 1; i >= 0; i--){ int a = num1[i] - '0'; int b = num2[j] - '0'; int tmp = res[i + j + 1] + a * b; res[i + j + 1] = tmp % 10; res[i + j] += tmp / 10; } } string ans;int i = 0; while(res[i] == 0 && i < res.size()){ i++; } for(; i < res.size(); i++){ ans.push_back(res[i] + '0'); } return ans; }真正答案:
https://blog.51cto.com/woodpecker/1955915
3.不用不用if,条件表达式,switch等判断比较a,b较大者请写一个程序,不用if,条件表达式,switch等判断 语句,找出两个整数a,b中的较大者。(a≠b) ·若a>b,输出a large ·若a<b,输出b large 示例1
输入:a=1,b=2输出:"b large"示例2
输入:a=2,b=1输出:"a large"脑筋急转弯,半天想不出来,其实当时也想到位运算的。。
#include<iostream>#include<bits/stdc++.h>using namespace std;int main(){ int a = 0, b = 1; vector<string> res = {"a large", "b large"}; int c = a - b; c = c >> (sizeof(int) * 8 - 1); //取得相减结果的二进制最高位, 0为正,1为负 cout << res[c] << endl; }答案出处:https://blog.csdn.net/weixin_37823499/article/details/125786533
4.特殊的排序特定一个字符串s,该字符串仅由字母与数字组成,即a-z,A-Z,0-9组成,
现在要求字母部分按降序排序,数字部分按照升序排 序,并且不改变之前字母和数字所在的位置,即字母之 创在该位置,排序后在该位置的依旧是字母。 要求不得使用编程语言自带的排序函数 示例: 输入,special——sort(ba3e2d59c) 输出,ed2c3b59a
思路:AC,其实就是自己实现一个快速排序,分别把数字字符串和字母字符串遍历提取出来,然后再遍历主串,数字串和字母串设两个指针在开头,主串遍历到字母则字母串指针值拷进去,然后前进一位;主串遍历到数字则数字串指针值拷进去,然后前进一位;
挺简单的,难怪只有10分。
#include<iostream>#include<bits/stdc++.h>using namespace std;int main(){ string cas = "ba3e2d59c"; string num, str; for(int i = 0; i < cas.size(); i++){ if(isalpha(cas[i])){ str.push_back(cas[i]); } else{ num.push_back(cas[i]); } } //题目忘记截代码了 方便期间省略了排序代码 sort(num.begin(),num.end()); sort(str.begin(),str.end()); int i = str.size() - 1, j = 0; for(int k = 0; k < cas.size(); k++){ if(isalpha(cas[k])){ cas[k] = str[i--]; } else{ cas[k] = num[j++]; } } cout << cas << endl;}总结:我太菜了
下一篇:手撕前端面试题【javascript~ 总成绩排名、子字符串频次统计、继承、判断斐波那契数组等】(前端面试题校招)
友情链接: 武汉网站建设