算法设计与分析第2版第一章
8.一个字符串采用String对象存储,设计一个算法判断该字符串是否为回文。
package a;
public class Test01 {
public static void main(String[] args) {// TODO Auto-generated method stubString 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 stubint 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 stubTest003 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重复的元素是:");for(int q=0;q<m;q++) {System.out.print(c[q]+" ");}
}
}
另外,本体、题刚开始想用TreeSet集合存储整数序列,因为 set可以自动排序而不用专门排序,但是后面需要定位到整数序列的每个位置,set无法实现,所以代码无法进行。。。。希望直到怎样修改这个代码的大神看到的话帮帮忙,想学习另外一种解决这个题目的方法。
package a;
import java.util.*;
public class Test03 {
public static void main(String[] args) {// TODO Auto-generated method stubTest03 test=new Test03();TreeSet<Integer> ts1=new TreeSet<>();TreeSet<Integer> ts2=new TreeSet<>();ts1.add(2);ts1.add(12);ts1.add(14);ts1.add(31);ts1.add(11);ts2.add(10);ts2.add(14);ts2.add(2);ts2.add(1);test.ChongFu(ts1,ts2);
}/*将有序整数序列ts1和ts2中重复的元素存储到数组a中*/
public static void ChongFu(TreeSet ts1,TreeSet ts2,int u,int v)
{int s=(int)ts1.first();int a[]=new int[10];int i=s;int j;j=u+1;int q=s;int b=0;while(i<=u&&j<=v) {if(i==j) {a[b]=i;b++;}else if(i<j) {i++;}else {j++;}}//输出储存在数组a中的所有重复元素for(;b<a.length;b++) {System.out.println(a[b]);;}
}
}
11.正整数n(n>1)可以写成质数乘积的形式,称为整数的质因数分解。例如,12=223,18=233,11=11.设计一个算法求n这样分解后各个质因数出现的次数,采用vector向量存放结果。
12.有一个整数序列,所有元素均不相同,设计一个算法求相差最小的元素对的个数。例如序列4,1,2,3的相差最小的元素对的个数是3,其元素对是(1,2)、(2,3)、(3,4)。
/先递增排序,再求相邻元素差,比较最小元素差,累计最小元素差的个数。对应的程序如下:/
package a;
import java.util.Arrays;
public class Test05 {
//定义全局变量
static int min;
public static void main(String[] args) {// TODO Auto-generated method stubTest05 test=new Test05(); int a[]= {4,12,3,6,2,23,11,13,21};Arrays.sort(a);//对数组a进行排序System.out.print("排序好的序列是:");for(int i=0;i<a.length;i++) {System.out.print(a[i]+" ");}int count=test.solve(a);System.out.print("相差最小的是:"+min+"出现的次数是:"+count);}
int solve(int a[]) {int count=1;min=a[1]-a[0];for(int j=2;j<a.length;j++) {int m=a[j]-a[j-1];if(m<min) {count=1;min=m;}else if(m==min){count++;}}//System.out.print("相差最小的是:"+min+"出现的次数是:"+count);return count;}
}
13.有一个map<string,int>容器,其中已经存放了较多元素,设计一个算法求出其中重复的value值并返回重复value的个数。
15.假设有一个含n(n>1)个元素的stack栈容器st,设计一个算法出栈从栈顶到栈底的第k(1<=k<=n)个元素,其他栈元素不变。
package a;
import java.util.Stack;
/*
- 栈的特点是:后进先出,不能顺序遍历
- 创建一个临时栈sta栈,将st的第k个元素出栈并进栈到sta中
- 再出栈sta得到第k个元素,最后将sta的所有元素出栈并进栈到st中
*/
public class Test07 {
int k=3;
String e;
String s;
public static void main(String[] args) {// TODO Auto-generated method stubTest07 test=new Test07();test.solve();
}public void solve() {Stack<String>st=new Stack<String>();Stack<String>sta=new Stack<String>();//定义一个临时栈//入栈st.push("a");st.push("c");st.push("f");st.push("b");st.push("h");//出栈st中的前k个元素,放到sta中for(int i=0;i<k;i++) {e=st.pop();//移除栈顶的元素sta.push(e);}//出栈sta中的第一个元素,即是st中的第k个元素System.out.println("栈中的第3个元素是:"+sta.pop());//将sta中的其他元素重新放到st栈中for(int j=0;j<sta.size();j++) {s=sta.pop();st.push(s); }//输出st中的栈顶元素验证是否成功将sta中的剩余元素转移到st中System.out.println("栈顶元素是:");System.out.println(" "+st.pop());}
}
实验1.统计求最大、最小元素的平均比较次数
编写一个实验程序,随机产生10个1~20的整数,设计一个高效算法找其中的最大元素和最小1元素,并统计元素之间的比较次数。调用该算法执行10次并求元素的平均比较次数。
package a
import java.util.*;
public class Test08 {
int count=0;
public static void main(String[] args) {
// TODO Auto-generated method stub
Test08 test=new Test08();
int c1=test.solve();
System.out.println(“元素之间比较的次数是:”+c1);
int c2=test.solve();
System.out.println(“元素之间比较的次数是:”+c1);
int c3=test.solve();
System.out.println(“元素之间比较的次数是:”+c1);
int c4=test.solve();
System.out.println(“元素之间比较的次数是:”+c1);
int c5=test.solve();
System.out.println(“元素之间比较的次数是:”+c1);
int c6=test.solve();
System.out.println(“元素之间比较的次数是:”+c1);
int c7=test.solve();
System.out.println(“元素之间比较的次数是:”+c1);
int c8=test.solve();
System.out.println(“元素之间比较的次数是:”+c1);
int c9=test.solve();
int c10=test.solve();
System.out.println(“元素之间比较的次数是:”+c1);
System.out.println(“平均比较的次数是:”+(c1+c2+c3+c4+c5+c6+c7+c8+c9+c10)/10);
}public int solve() {int a[]=new int[10];int i;System.out.println("产生的10个随机数是 ");for(i=0;i<a.length;i++) {a[i]=(int)(Math.random()*20+1);System.out.print(" "+a[i]);}int max=a[0];int min=a[0];for(int j=1;j<a.length;j++) {count++;//比较一次,count增加1if(a[j]>max) {max=a[j];}else {count++;//比较一次count加1,下面是比较后的结果if(a[j]<=min) {min=a[j];}}}System.out.println("最大值是 "+max+"最小值是:"+min);return count;
}
}
public class Test08 {
int count=0;
public static void main(String[] args) {
// TODO Auto-generated method stub
Test08 test=new Test08();
int c1=test.solve();
System.out.println(“元素之间比较的次数是:”+c1);
int c2=test.solve();
System.out.println(“元素之间比较的次数是:”+c1);
int c3=test.solve();
System.out.println(“元素之间比较的次数是:”+c1);
int c4=test.solve();
System.out.println(“元素之间比较的次数是:”+c1);
int c5=test.solve();
System.out.println(“元素之间比较的次数是:”+c1);
int c6=test.solve();
System.out.println(“元素之间比较的次数是:”+c1);
int c7=test.solve();
System.out.println(“元素之间比较的次数是:”+c1);
int c8=test.solve();
System.out.println(“元素之间比较的次数是:”+c1);
int c9=test.solve();
int c10=test.solve();
System.out.println(“元素之间比较的次数是:”+c1);
System.out.println(“平均比较的次数是:”+(c1+c2+c3+c4+c5+c6+c7+c8+c9+c10)/10);
}public int solve() {int a[]=new int[10];int i;System.out.println("产生的10个随机数是 ");for(i=0;i<a.length;i++) {a[i]=(int)(Math.random()*20+1);System.out.print(" "+a[i]);}int max=a[0];int min=a[0];for(int j=1;j<a.length;j++) {count++;//比较一次,count增加1if(a[j]>max) {max=a[j];}else {count++;//比较一次count加1,下面是比较后的结果if(a[j]<=min) {min=a[j];}}}System.out.println("最大值是 "+max+"最小值是:"+min);return count;
}
}
实验2:求无序序列中第k小的元素
编写一个实验程序,利用priority_queue(优先队列)求出一个无序整数序列中第k小的元素。
package a;
import java.util.Queue;
import java.util.PriorityQueue;
/*
- 优先队列中的元素默认按自然顺序排列
- 创建一个int类型的优先队列,向其中增加若干元素
- 假设需要输出的是队列中的第k个元素,设置一个变量i,i依次增加,判断i值与k值是否相等,若不相等,直接输出,若相等,则输出提示语句,并且输出第k个值。
*/
public class Test09 {
static int k=3;
//static int i=0;
public static void main(String[] args) {// TODO Auto-generated method stubint a[]=new int[6];//定义int类型数组存放队列前k个元素PriorityQueue<Integer>pq=new PriorityQueue<>(6);pq.add(3);pq.add(11);pq.add(4);pq.add(12);pq.add(1);pq.add(23);// System.out.println("此时优先队列中的元素是: ");for(int i=1;i<6;i++) {if(i!=k)System.out.print(pq.poll()+" ");else {System.out.println("队列中第 "+k+"个元素是:"+pq.poll());break;}}
}
}
实验3:出栈第k个元素
编写一个实验程序,对于一个含n(n>1)个元素的queue队列容器qu,出队从队头到队尾的第k(1<=k<=n)个元素,其他队列元素不变
package a;
import java.util.PriorityQueue;
/*
- 创建一个队列,依次让从队头到队尾的k个元素出栈,
- 出栈的元素保存到另外一个队列que中
- que中的元素出栈,第一个元素即为所求
- que中的元素依次出栈到qu中
*/
public class Test10 {
static int k=4;
static PriorityQueue qu=new PriorityQueue();
static PriorityQueue que=new PriorityQueue();
public static void main(String[] args) {// TODO Auto-generated method stubqu.add("f");qu.add("e");qu.add("b");qu.add("d");qu.add("c");qu.add("a");Test10 test=new Test10();test.solve();}
public void solve() {//利用队列先进先出的特点(FIFO)//Object arr[]=new Object[10];for(int i=0;i<k;i++) {que.add(qu.poll());//将qu中的前k个元素移到que中}for(int j=1;j<=k;j++) {if(j==k) {System.out.println("qu队列中的第"+k+"个元素是:"+que.poll());}else {qu.add(que.poll());//将不是第k个元素的元素重新放回qu队列}}for(int s=0;s<5;s++) {System.out.println("qu队列中的元素是:"+qu.poll());}
}
}
实验4:设计一种好的数据结构I编写一个实验程序,设计一个好的数据结构,尽可能高效的实现元素的插入、删除、按值查找和按序号查找(假设所有元素值不相同)
算法设计与分析第2版第一章相关推荐
- 计算机算法设计与分析第四版复习,计算机算法设计与分析(第4版)第1章.ppt
<计算机算法设计与分析(第4版)第1章.ppt>由会员分享,可在线阅读,更多相关<计算机算法设计与分析(第4版)第1章.ppt(50页珍藏版)>请在人人文库网上搜索. 1.计算 ...
- 计算几何学习总结(使用教材算法设计与分析(第二版))
** 计算几何总结(使用教材算法设计与分析(第二版)李春葆 清华大学出版社) ** (代码大部分为书中原有代码,如有雷同,实属正常.) #include<bits/stdc++.h> us ...
- SDU 2021.1 算法设计与分析考试 回忆版
SDU 2021.1 计科 算法设计与分析考试 计算题 DFSDFSDFS:画出深度优先树:给出每个点的开始时间和结束时间:给出每条边的分类 有向图上的多源最短路径,要求计算distancematri ...
- C++算法设计与分析课后习题(第三章)
C++算法设计与分析课后习题[第三章] 前言 一.求2+22+222+2222+...+22...(n个2)...22(精确计算) 变量解释 运行截图 二.编写一个算法,其功能是给一维数组a输入任意6 ...
- 【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA / C++实现:3.9 荷兰国旗问题
题目 : 荷兰国旗问题.要求重新排列一个由字符R,W,B(R代表红色,W代表白色,B代表兰色,这都是荷兰国旗的颜色)构成的数组,使得所有的R都排在最前面,W排在其次B排在最后.为荷兰国旗问题设计一个算 ...
- 计算机科学概论第二版胡明课后答案,算法设计与分析(第2版)王红梅胡明习题答案.doc...
文档介绍: ****题 1 1. 图论诞生于七桥问题.出生于瑞士的伟大数学家欧拉( Leonhard Euler , 1707 - 1783 ) 提出并解决了该问题.七桥问题是这样描述的: 一个人是否 ...
- 【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA / C++实现:3.14 变位词
题目 14.变位词.给定两个单词,判断这两个单词是否是变位词.如果两个单词的字母完全相同,只是位置有所不同,则这两个单词称为变位词.例如,eat和tea是变位词 代码 #include <ios ...
- 算法设计与分析(python版)-作业一
参考教材:算法设计与分析(Python版) 作者:王秋芬 1 . 容易 (4分)2 n=O(100n ^2) 错误 2 . 容易 (3分)10=θ(log10) 正确 3 . 容易 ( ...
- 算法设计与分析(python版)-作业三
参考教材:算法设计与分析(Python版) 作者:王秋芬 1 . 普通 (5分)以下问题中,哪些问题的分治算法消耗的时间与输入序列无关.() A. 二分查找 B. 合并排序 C. 快速 ...
最新文章
- webView的属性
- How is XSRF token retrieved from backend
- 友盟分享小程序_iOS分享微信小程序
- Screen Painter 程序设计
- ESP8266连接天猫精灵(一)
- Canto助力金融衍生品市场持续、健康、快速发展
- 毕业季,既是告别,也是新的开始
- 个人介绍 php 怎么说,个人介绍怎么写
- Fiddler获取微信视频太好用了呀
- 关于组件之间使用provide和inject传值
- 贝叶斯法则求垄断者阻挠概率的动态博弈问题
- 2022 manjaro安装中文输入法
- SpringCache之@CacheEvict注解的使用说明
- python 遍历目录
- 如何把图片转换成PDF?4种简单快捷的方法,一键将图片转PDF
- Easyui datagrid detailview使用简介
- 干货来袭:抖音定位的重要性及抖音四步曲丨国仁网络资讯
- 关于大数据技术的演讲_大数据核心技术介绍:大数据处理技术
- 第三章 栈与队列(二)
- 大学计算机实验六实验报告,大学计算机实验6 实验报告.pdf