搜狐9.13软件开发 编程题

1题
兄弟串
通过交换两个字符能得到的串称为兄弟串,判断两个字符串是否为兄弟串
AC
思路:判断两个字符串中相同位值不同的个数,将相应位置为*,若=2,则符合要求,
若!=2,则排序,若存在至少两个不为*的相同字符,则也符合要求
#include<bits/stdc++.h>
using namespace std;
int main(){
string a,b;
while(cin>>a>>b){
int count = 0;
bool flg = false;
if(a.size()!=b.size())
cout<<0<<endl;
else{
for(int i = 0;i<a.size();i++){
if(a[i]!=b[i]){
count++;
a[i] = '*';
b[i] = '*';
}
}
if(count==2)
flg = true;
else{
sort(a.begin(),a.end());
sort(b.begin(),b.end());
for(int i = 0;i<a.size()-1;i++){
if(a[i]==a[i+1]&&a[i]!='*'){
flg = true;
break;
}
}
}
if(flg)
cout<<1<<endl;
else
cout<<0<<endl;
}
}
system("pause");
return 0;
}

2题
计算移动次数
无限长的x轴,从坐标0开始,每次向左或向右移动,第n次移动就移动n
问移动到目的点的最少移动次数
AC
思路:1~k最大可以得到(1+k)*k/2;将n转为正数,因为n与-n的次数相同,只是镜像取正负;
使得(1+k)*k/2>=n,则(1+k)*k/2-n得到的是小于(1+k)*k/2的正数,若减完后是偶数x,
则可以通过调整1~k中若干个数ai+aj+ak+al....=x/2,将相应的+号转为-号,即可实现将结果-x,
也就是最小的移动次数
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
while(cin>>n){
int pos = 0;
if(n<0)
n = -n;
for(int i = 0;i<n+5;i++){
int temp = (1+i)*i/2;
if(temp>=n&&(temp-n)%2==0){  //temp>=n且减数为偶数
pos = i;
break;
}
}
cout<<pos<<endl;
}
system("pause");
return 0;
}

3题
比较版本号大小
判断两个版本号大小
AC
思路:将版本号补齐,直接比较字符串的大小
#include<bits/stdc++.h>
using namespace std;
int main(){
string a,b;
while(cin>>a>>b){
if(a.size()==1)
a+=".0.0.0";
else if(a.size()==3)
a+=".0.0";
else if(a.size()==5)
a+=".0";
if(b.size()==1)
b+=".0.0.0";
else if(b.size()==3)
b+=".0.0";
else if(b.size()==5)
b+=".0";

bool flg = a>b;
if(flg)
cout<<1<<endl;
else if(a==b)
cout<<0<<endl;
else
cout<<-1<<endl;
}
system("pause");
return 0;
}
#搜狐#
全部评论
class Solution:     def buddyStrings(self, A, B):         """         :type A: str         :type B: str         :rtype: bool         """         if len(A) != len(B):             return False         else:             count = 0             aa=[]             bb=[]             for i in range(len(A)):                 if A[i] != B[i]:                     count += 1                     aa.append(A[i])                     bb.append(B[i])             if count == 2:                 if list(reversed(bb)) == aa:                     return True                 else:                     return False             elif count == 0 and len(set(A)) != len(A):                  return True             else:                 return False #注意考虑 aab  和  aab这种情况也是可以的!两个字符串一样,但是 有重复的字符就可以! if list(reversed(bb)) == aa: 是为了避免 ab和 cd这种情况被判为True
点赞 回复 分享
发布于 2018-09-13 22:10
第二题用了n^2暴力,,一直47%。一开始没想通想试下x(x+1) retrun x或x+1,最后没试,可惜了。
点赞 回复 分享
发布于 2018-09-13 20:38
大佬请收下我的膝盖🐼
点赞 回复 分享
发布于 2018-09-13 20:41
好像第二题明白了,不过你为啥是< n + 5
点赞 回复 分享
发布于 2018-09-13 20:42
真的牛啊
点赞 回复 分享
发布于 2018-09-13 20:43
看不懂大神写的第二题....第二题不属于我
点赞 回复 分享
发布于 2018-09-13 20:51
蒂花之秀
点赞 回复 分享
发布于 2018-09-13 20:52
第一题没有问题吗?abc和ade好像在大佬的程序里也是输出1吧
点赞 回复 分享
发布于 2018-09-13 21:16
大佬,第二题的思路是你纯靠聪明才智想出来的?还是以前遇到过类似的编程题或者数学题呢?
点赞 回复 分享
发布于 2018-09-13 21:59

相关推荐

01-15 13:52
已编辑
河南大学 Java
六年要多久:标准头像,不吃香菜😂
点赞 评论 收藏
分享
会飞的猿:我看你想进大厂,我给你总结一下学习路线吧,java语言方面常规八股要熟,那些java的集合,重点背hashmap八股吧,jvm类加载机制,运行时分区,垃圾回收算法,垃圾回收器CMS、G1这些,各种乐观锁悲观锁,线程安全,threadlocal这些。在进阶一些的比如jvm参数,内存溢出泄漏排查,jvm调优。我这里说的只是冰山一角,详细八股可以去网上找,这不用去买,都免费资源。mysql、redis可以去看小林coding,我看你简历上写了,你一定要熟,什么底层b+树、索引结构、innodb、mvcc、undo log、redo log、行级锁表级锁,这些东西高频出现,如果面试官问我这些我都能笑出来。消息队列rabbitmq也好kafka也好,学一种就行,什么分区啊副本啊确认机制啊怎么保证不重复消费、怎么保证消息不丢失这些基本的一定要会,进阶一点的比如LEO、高水位线、kafka和rocketmq底层零拷贝的区别等等。计算机网络和操作系统既然你是科班应该理解起来问题不大,去看小林coding这两块吧,深度够了。spring boot的八股好好看看吧,一般字节腾讯不这么问,其他的java大厂挺爱问的,什么循环依赖啥的去网上看看。数据结构的话科班应该问题不大,多去力扣集中突击刷题吧。项目的话其实说白了还是结合八股来,想一想你写的这些技术会给你挖什么坑。除此之外,还有场景题、rpc、设计模式、linux命令、ddd等。不会的就别往简历上写了,虽然技术栈很多的话好看些,但背起来确实累。总结一下,多去实习吧,多跳槽,直到跳到一个不错的中厂做跳板,这是一条可行的进大厂的路线。另外,只想找个小厂的工作的话,没必要全都照这些准备,太累了,重点放在框架的使用和一些基础八股吧。大致路线就这样,没啥太多难度,就是量大,你能达到什么高度取决于你对自己多狠,祝好。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务