2019年58同城笔试题

题目1.输入一个字符串,输入整数n,找出长度为n的相同字符构成的子串。

例如:输入:
字符串“abbbccccddeeffffaaaddzzz”,整数3
输出:
(1,3,bbb)
(16,18,aaa)

(21,23,zzz)

基本思路:该题使用两个指针,i指向下标为0处,j指向下标为1处,如果i 指向的字符与j指向的字符相同,那么将将j向后挪动一位,并将计数器加一,重复该操作直到i 和j 指向的字符不同为止,此时如果count值为输入的长度n,那么就打印出从下标i到下标 j-1的字符。然后将i的值赋给j,j=i+1,重复上面的操作。

代码实现:

public class Main
{
	public static void main(String[] args)
	{
		int n = 3;
		String str = "abbbccccddeeffffaaaddzzz";
		int i = 0;
		int j = 1;
		int count;
		char[] ch = str.toCharArray();
		int N = ch.length - 1;
		while(j<=N&&i<=N)
		{
			count = 1;
			while(j<=N&&ch[i]==ch[j])
			{
				count++;
				j++;
				
			}
			if(count==n)
			{
				System.out.print("("+i+","+(j-1)+",");
				for(int k=0;kn)
			{
				i = j;
				j = i + 1;
			}
			else
			{
				i = i+ 1;
				j = i + 1;
			}
		}
	}
}
题目2:计算数组最大的连续子序列的和

如:{14,-2,4,-3,5,7,2,-39,22},和最大子序列是{14,-2,4,-3,5,7,2},返回27

思路一:暴力求解(时间复杂度n^2):

列举出所有的自序列的组合,将他们相加:

[14],[14,-2],[14,-2,4],[14,-2,4,3]..........

[-2],[-2,4],[-2,4,-3]..........

........

[22]

代码实现:

public class Main
{
	public static void main(String[] args)
	{
		int[] a = {14,-2,4,-3,5,7,2,-39,22};
		int N = a.length;
		int Max = Integer.MIN_VALUE;		//取最小整数
		int result;

		for(int i=0;i

思路二:动态规划

思路:求n个数的数组的最大字段和,转为分别求以第1个、第2个........第n个数字结尾的最大字段和,再找出n个结果中最大的。

代码实现:

//数组的所有连续子段的最大和
public class Main
{
	public static void main(String[] args)
	{
		int[] a = {14,-2,4,-3,5,7,2,-39,22};
		maxSum(a,a.length);		
	}
	public static void maxSum(int[] a,int n)
	{
		int[] dp = new int[a.length];
		dp[0] = a[0];
		for(int i=1;imax)
				max = dp[i];
		}
		System.out.println(max);
	}
}

你可能感兴趣的:(找工作面试题整理)