【数据结构与算法】数组应用4:多项式计算Java版

简介:

    这里讨论的是多项的加法,直接看下面的程序代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package  chapter02;
 
import  java.util.Arrays;
 
/*
  * 多项式加法(简单版)
  * A(x) = 2x^5 + 3x^4 + 0x^3 + 5x^2 + 4x^1 +1x^0
  * B(x) =        3x^4 + 2x^3 + 1x^2 + 1x^1 + 2x^0
 
  * A(x) + B(x) = 
  * C(x) = 2x^5 + 6x^5 + 2x^3 + 6x^2 + 5x^1 + 3x^0
 
  * 采用一维数组保存,第一个元素保存多项式的最高次幂,后面依次保存每项的次数
  * A(x) = [5, 2, 3, 0, 5, 4, 1]
  * B(x) = [3,    2, 1, 1, 2, 2]
  * A(x) + B(x) =
  * C(x) = [5, 2, 5, 1, 6, 6, 3]
 
  */
public  class  CH02_08 {
     public  static  void  main(String[] args) {
         //定义两个多项式的数组
         int [] arr1 = { 5 2 3 0 5 4 1 };
         int [] arr2 = { 3 ,     2 1 1 2 2 };
         
         //输出两个多项式数组
         System.out.println(Arrays.toString(arr1));
         System.out.println(Arrays.toString(arr2));
         
         //定义结果多项式的数组
         int  arrResultLen = arr1.length > arr2.length ? arr1.length:arr2.length;    //数组长度为拥有较多项的多项式的数组的长度
         int [] arrResult =  new  int [arrResultLen];
         
         //初始化arrResult
         Arrays.fill(arrResult,  0 );
         
         //输出arrResult
         System.out.println();
         System.out.println(Arrays.toString(arrResult));
         
         //开始计算多项式的加法
         int [] bigArr = arr1.length == arrResultLen ? arr1:arr2;       //找出项较多的多项式数组
         int [] smallArr = arr1.length == arrResultLen ? arr2:arr1;     //找出项较少的多项式数组
         for ( int  bigLen = bigArr.length -  1 , smallLen = smallArr.length -  1 ; bigLen >=  0 ; bigLen--, smallLen--){
             //逆序数组进行计算,这样就可以实现项的幂一一对应
             if (smallLen >  0 ){
                 //小的多项式数组的第0项只是表示最高次幂,对实际计算没有用处,这里只计算小的多项式数组第0项之后的值
                 arrResult[bigLen] = bigArr[bigLen] + smallArr[smallLen];
             else  {
                 //再往前走,如果smallArr已经到达了第0项,则只把bigArr中相应的值直接保存到arrResult中
                 arrResult[bigLen] = bigArr[bigLen];
             }
         }
         
         //输出结果多项式的数组
         System.out.println();
         System.out.println(Arrays.toString(arrResult));
         
     }
}

    执行结果如下:

1
2
3
4
5
6
[5, 2, 3, 0, 5, 4, 1]
[3, 2, 1, 1, 2, 2]
 
[0, 0, 0, 0, 0, 0, 0]
 
[5, 2, 5, 1, 6, 6, 3]




本文转自 xpleaf 51CTO博客,原文链接:http://blog.51cto.com/xpleaf/1976984,如需转载请自行联系原作者
目录
打赏
0
0
0
0
265
分享
相关文章
打乱数组内容引发的问题( Java)
本文介绍了两种实现数组随机打乱的方法,并深入探讨了Java中原始数据类型与对象类型的差异。方法一通过自定义随机数交换数组元素位置,方法二借助`Collections.shuffle()`函数完成数组打乱。同时,文章详细解析了`int`和`Integer`的区别,包括声明方式、内存占用、初始化以及对象特性等,并讲解了自动装箱与拆箱的功能,帮助读者更好地理解Java的基础知识。
Java 中数组Array和列表List的转换
本文介绍了数组与列表之间的相互转换方法,主要包括三部分:1)使用`Collections.addAll()`方法将数组转为列表,适用于引用类型,效率较高;2)通过`new ArrayList<>()`构造器结合`Arrays.asList()`实现类似功能;3)利用JDK8的`Stream`流式计算,支持基本数据类型数组的转换。此外,还详细讲解了列表转数组的方法,如借助`Stream`实现不同类型数组间的转换,并附带代码示例与执行结果,帮助读者深入理解两种数据结构的互转技巧。
103 1
Java 中数组Array和列表List的转换
|
4月前
|
《从头开始学java,一天一个知识点》之:数组入门:一维数组的定义与遍历
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问"`a==b`和`equals()`的区别",大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。明日预告:《多维数组与常见操作》。 通过实例讲解数组的核心认知、趣味场景应用、企业级开发规范及优化技巧,帮助你快速掌握Java数组的精髓。
92 23
Java 复制数组
本文介绍了Java中数组的基础知识与常用操作,包括数组的概念、创建、访问元素、遍历、复制、排序和搜索等方法。同时详细讲解了数组的五种赋值方式,并通过代码示例演示了求总和平均值、最大最小值、升序降序排序及Arrays类的常用方法。内容深入浅出,适合初学者学习掌握Java数组的核心功能与应用场景。
Java 中数组的多种定义方式
本文深入解析了Java中数组的多种定义方式,涵盖基础的`new`关键字创建、直接初始化、动态初始化,到多维数组、`Arrays.fill()`方法以及集合类转换为数组等高级用法。通过理论与实践结合的方式,探讨了每种定义方法的适用场景、优缺点及其背后的原理,帮助开发者掌握高效、灵活的数组操作技巧,从而编写更优质的Java代码。
120 0
|
8月前
|
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
745 9
|
8月前
|
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
182 58
栈区的非法访问导致的死循环(x64)
这段内容主要分析了一段C语言代码在VS2022中形成死循环的原因,涉及栈区内存布局和数组越界问题。代码中`arr[15]`越界访问,修改了变量`i`的值,导致`for`循环条件始终为真,形成死循环。原因是VS2022栈区从低地址到高地址分配内存,`arr`数组与`i`相邻,`arr[15]`恰好覆盖`i`的地址。而在VS2019中,栈区先分配高地址再分配低地址,因此相同代码表现不同。这说明编译器对栈区内存分配顺序的实现差异会导致程序行为不一致,需避免数组越界以确保代码健壮性。
21 0
栈区的非法访问导致的死循环(x64)
232.用栈实现队列,225. 用队列实现栈
在232题中,通过两个栈(`stIn`和`stOut`)模拟队列的先入先出(FIFO)行为。`push`操作将元素压入`stIn`,`pop`和`peek`操作则通过将`stIn`的元素转移到`stOut`来实现队列的顺序访问。 225题则是利用单个队列(`que`)模拟栈的后入先出(LIFO)特性。通过多次调整队列头部元素的位置,确保弹出顺序符合栈的要求。`top`操作直接返回队列尾部元素,`empty`判断队列是否为空。 两题均仅使用基础数据结构操作,展示了栈与队列之间的转换逻辑。
|
6月前
|
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
297 77

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问