算法设计与分析第2版第一章

这是一系列关于算法设计与分析的实践题目,包括判断回文字符串、寻找数组中和为k的两个数、求两个整数序列的交集、解决TreeSet定位问题、质因数分解、找相差最小元素对、检测map重复value、从栈中取出第k个元素、统计找最大最小元素的平均比较次数、求无序序列中第k小元素以及从队列中出队第k个元素等算法挑战。
摘要由CSDN通过智能技术生成

8.一个字符串采用String对象存储,设计一个算法判断该字符串是否为回文。
package a;

public class Test01 {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	
	String str1="abcd";
	String str2="abcdcba";
	solve(str1);
	solve(str2);
	
}

public static boolean solve(String str) {//判断字符串是否是回文
	int i=0;
	int j=str.length()-1;
	char c[]=str.toCharArray();
	while(i<j) {
		if(c[i]!=c[j]) {
			System.out.println("该字符串不是回文");
			return false;
			
		}
		i++;
		j--;
	}
	System.out.println("该字符串是回文");
	return true;
	
}

}

在这里插入图片描述
9.有一个整数序列,设计一个算法判断其中是否存在两个元素的和恰好等于给定的整数k。
public class Test02 {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	int a[]= {12,11,14,63,21,33,43,5,1,3};
	Test02 t=new Test02();
	t.PaiXu(a);
}
//实现排序及判断是否存在符合要求的数的方法

public boolean PaiXu(int a[]) {
	Arrays.sort(a,0,a.length);
	System.out.println("该数组按升序排序后的顺序是:");
	for(int i=0;i<a.length;i++) {
		System.out.print(a[i]+" ");
	}
	
	int k=13;
	int j=a.length;//a.length返回数组的长度;a.length()返回字符串长度
	int s=a[0];
	while(s<j) {
		if(s+j==k) {
			System.out.println("存在");
			return true;
		}
		else if(s+j<k) {
			s++;
		}
		else {
			j--;
		}
	}
	return false;
}

}
在这里插入图片描述
10.有两个整数序列,每个整数序列中所有元素均不相同,设计一个算法求他们的公共元素,要求不使用STL的集合算法。
package a;

import java.util.Arrays;
public class Test003 {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	
	Test003 test=new Test003();
	int a[]= {4,34,13,32,22,15};
	int b[]= {1,22,3,23,4,11};
	Arrays.sort(a);//对数组a排序
	Arrays.sort(b);//对数组b排序
	
	System.out.print("数组a排序后的元素是:");
	for(int i:a) {//对数组a中的元素,一个一个进行循环
		System.out.print(i+" ");
	}
	
	System.out.print("数组b排序后的元素是:");
	for(int j:b) {
		System.out.print(j+" ");
	}
	
	test.ChongFu(a,b);

}
public	void ChongFu(int a[],int b[])
{
	int i=0;
	int j=0;
	//int q=s;
	int c[]=new int[10];
	int m=0;
	
	while(i<a.length&&j<b.length)
	{
		if(a[i]==b[j]) {
			c[m]=a[i];
			m++;
			//System.out.print("数组a和数组b重复的元素是:"+c[m]);
			i++;
			j++;
		}
		else if(a[i]>b[j])
		{
			j++;
		}
		else 
		{
			i++;
		}
	}
	System.out.print("数组a和数组b重复的元素
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值