腾讯实习招聘模拟题


第一道大题:补充代码

DNA中有A、C、G、T等基因单元,ACGT算是在单词表中的正常顺序,而CA,GA,GC,TA,TC,TG算是逆序对,给你一个基因序列,即包含A、C、G、T的字符串数组,求出逆序对的个数。
在做以前的面试题的时候做过一道求逆序对并且排序的题,因此这个题目应该要比上一个要简单。

思路:从后往前扫描序列,这里只有ACGT四中情况,因此题目中给出的使用的是switch case如果不是补充代码的话估计我也想不到这样做。如果是A那么前面的序列中除了A以外的CGT都是逆序。C的话是GT,G的话是T,T没有逆序。这样一趟扫描后便可以统计出来逆序对的数量,刚开始的时候还是有点小迷糊的就在于: 假设是A的情况那么,序列中非A的字母的数量怎么统计出来的?
一开始我也想不明白,这里使用了一个数组来arr[]保存ACGT的数量,count来记录逆序对的数量。
case A:
count = count +arr[1] +  arr[2] + arr[3];
break;
case B;
arr[1]++;
count = count + arr[2] + arr[3];
break;
现在应该就明白了吧,其实arr是在不断更新的,因此可以在O(n)内完成。具体的代码如下:

public static int inversionPairsCount(String str)
	{
		int countFinal=0;
		int arr[]=new int[4];
		Arrays.fill(arr, 0);
		int len=str.length();
		int i=0;
		char ch;
		while(i<len)
		{
			ch=str.charAt(i);
			i++;
			switch (ch) {
			case 'A':
				{
					<span style="color:#ff0000;">----------------------------------------  //1</span>
					<span style="color:#ff0000;">countFinal=countFinal+arr[1]+arr[2]+arr[3];</span>
				}
				break;
			case 'C':
				{
				    <span style="color:#ff0000;">arr[1]++;
				    countFinal = countFinal+arr[2]+arr[3];</span>
				}
				break;
			case 'G':
				{
					<span style="color: rgb(255, 0, 0); font-family: Arial;">arr[2]++;</span>
<span style="color: rgb(255, 0, 0); font-family: Arial;"><span style="white-space:pre">								</span>      countFinal=countFinal+arr[3];</span>
<span style="color:#ff0000;">					</span>
				}
				break;
			case 'T':
					<span style="color:#ff0000;">arr[3]++;</span>
<span style="white-space:pre">					</span><span style="color:#cc0000;">-------------------------------//2</span>
				break;
			}
		}
		return countFinal;
	}
其中红线部分为让补充的部分,很不幸的是有两处我没写上来,分别是注释出来的1和2处,因为感觉不到要写什么了。后来从网上搜索了一下有人写的是arr[0]++,但是这里countFinal 和arr[0]没关系,写了多余。至于第二处确实不知道了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值