精华内容
下载资源
问答
  • 最长有序序列

    千次阅读 2015-12-13 22:28:35
    什么是最长有序序列呢? 首先要明白子序列和子串不同,可以不连续,然后保证有序就是有序序列了。 比如有如下数组: I 0 1 2 3 4 5 6 7 8 Num[I] 1 4 7 2 5 8

    什么是最长有序子序列呢?

    首先要明白子序列和子串不同,可以不连续,然后保证有序就是有序子序列了。

    
    

    比如有如下数组:

    I

    0

    1

    2

    3

    4

    5

    6

    7

    8

    Num[I]

    1

    4

    7

    2

    5

    8

    3

    6

    9

    F[I]                            

    1

    2

    3

    2

    3

    4

    3

    4

    5

    其中F[I]存的是以NUM[I]结尾的子序列的最长长度。

    上面看懂了,求一个数组的最长有序子序列就容易了,代码如下:

    public class Test {
        public static void main(String[] args) {
            int[] num = new int[]{1,4,7,2,5,8,3,6,9};
            int[] f = new int[num.length];
            for (int i = 0;i < num.length;i++) {
                f[i] = 1;
            }
            int max = f[0];
            for (int i = 1;i < num.length;i++) {
                for (int j = 0;j < i;j++) {
                    //更新条件,1是有序,2是长度能变长
                    if (num[i] >= num[j] && f[i] < f[j] + 1) {
                        f[i] = f[j] + 1;
                        if (f[i] > max) {
                            max = f[i];//更新最长的长度
                        }
                    }
                }
            }
            System.out.println(max);
        }
    }
    






    展开全文
  • PAT—两个有序序列的合并 题目 思路 首先应该注意审题,L1,L2都带头结点的单链表,也就是说L1->Next才这个链表的数据存储的地方,再一点就是这种链表都要有头尾的,L一开始在头,最后返回的也就是L,r...

    PAT—两个有序序列的合并

    题目

    wangxining_2021-05-28_12-24-31

    wangxining_2021-05-28_12-24-42

    思路

    首先是应该注意审题,L1,L2都是带头结点的单链表,也就是说L1->Next才是这个链表的数据存储的地方,再一点就是这种链表都是要有头尾的,L一开始在头,最后返回的也就是L,r是移动加入链表的地方;L1,L2也不要去移动,让p和q去移动。L为什么要malloc,因为L的next要赋值,而且还要赋给r所以要给malloc,因为你不malloc,系统申请变量得到的空间就是指针的那个地址的空间,所以不能用Next。而p,q,r呢全都是赋值已经有的空间,所以不需malloc,当然你要是想malloc,也是可以的。这个题目中是需要头结点的返回,所以我们在最后返回L即可,而不需要把L向后移动,并且释放头结点的空间的操作了。

    代码

    List Merge( List L1, List L2 ){
    	List L,p,q,r;
    	L=(List)malloc(sizeof(struct Node));	//新建一个结点
    	p=L1->Next;	//p指向L1最小值
    	q=L2->Next;	//q指向L2最小值
    	L->Next=NULL;//要使用Next所以要给L进行malloc空间
    	r=L;		//r指向L
    	while(p!=NULL&&q!=NULL)	//p、q都不空,选取p、q所指结点较小者插入L的尾部
    	{
    		if(p->Data<=q->Data){
    			r->Next=p;
    			p=p->Next;
    			r=r->Next;
    		}else{
    			r->Next=q;
    			q=q->Next;
    			r=r->Next;
    		}
    	}
    	if(p!=NULL) r->Next=p;
    	if(q!=NULL) r->Next=q;
    	L1->Next=NULL;
    	L2->Next=NULL;
    	return L;
    }
    
    
    
    展开全文
  • JAVA向有序序列数组插入字符,如何比对单个英文单词大小。 提示:本文共使用三种数据类型,分别是:int,char,String类型。 一、什么是数组?数组的基本要素是什么? 首先我们得了解一下: 数组  简单来说,数组...

    JAVA向有序序列数组插入字符,如何比对单个英文单词大小。

    提示:本文共使用三种数据类型,分别是:int,char,String类型。

    一、什么是数组?数组的基本要素是什么?

    首先我们得了解一下:

    数组

     简单来说,数组是一个变量,存储相同数据类型的一组数据

    数组基本要素

     标识符:数组的名称,用于区分不同的数组
     数组元素:向数组中存放的数据
     元素下标:对数组元素进行编号,从0开始,数组中的每个元素都可以通过下标来访问
     元素类型:数组元素的数据类型

    二、案例分享(三题均为同一类型题目,不同点在于数组类型)

    例题一:

    提示:因为数组定义长度后是无法改变的,所以使用Arrrays.copyOf(int [], new length);复制并扩容到想要的长度。
    在这里插入图片描述

    public static void main(String[] args) {
    		int[] arr = { 99, 85, 82, 83, 60 };//有序集合
    		//无序集合可以用Arrays.sort(arr); 升序排序。
    		//降序方法我会在下一篇博客更新
    		System.out.println("原成绩:" + Arrays.toString(arr));
    		System.out.print("待插入成绩:");
    		Scanner sc = new Scanner(System.in);
    		int score = sc.nextInt();
    		int index = 0;
    		
    		//复制并扩容一个长度
    		int[] newarr = Arrays.copyOf(arr, arr.length + 1);
    
    		//输入成绩与数组成绩比较,得到插入有序集合的下标。
    		for (int i = 0; i < newarr.length - 1; i++) {
    			if (score > newarr[i]) {
    				index = i;
    				break;
    			}
    		}
    
    		System.out.println("插入成绩下标" + index);
    
    		for (int i = newarr.length-1; i > 0; i--) {
    			if (i == index) {
    				break;
    			}
    			newarr[i] = newarr[i-1];
    
    		}
    		newarr[index] = score;
    		System.out.println("插入后成绩为:"+Arrays.toString(newarr));
    
    	}
    
    

    2.输出结果:

    原成绩:[99, 85, 82, 83, 60]
    待插入成绩:88
    插入成绩下标1
    插入后成绩为:[99, 88, 85, 82, 83, 60]
    

    例题二:

    提示:char类型数组可以直接在 if 语句中用> < = 运算符进行比对大小。

    案例二:在这里插入图片描述
    请使用char数组解答:

    public static void main(String[] args) {
    		char[] arr = {'a','b','c','e','f','p','u','z'};
    		System.out.println("原数组:" + Arrays.toString(arr));
    		System.out.print("待插入字母:");
    		Scanner sc = new Scanner(System.in);
    		char number = sc.next().charAt(0);
    		int index = 0;
    		char[] newarr = Arrays.copyOf(arr, arr.length + 1);
    
    		for (int i = 0; i < newarr.length - 1; i++) {
    		//char可以直接用大于号小于号等于号进行比较
    			if (number < newarr[i] ) {
    				index = i;
    				break;
    			}
    		}
    
    		System.out.println("插入字母下标:" + index);
    
    		for (int i = newarr.length-1; i > index; i--) {
    			newarr[i] = newarr[i-1];
    
    		}
    		newarr[index] = number;
    		System.out.println("插入后数组为:"+Arrays.toString(newarr));
    	}
    
    

    输出结果:

    原数组:[a, b, c, e, f, p, u, z]
    待插入字母:m
    插入字母下标:5
    插入后数组为:[a, b, c, e, f, m, p, u, z]
    

    例题三:

    提示:
      String类型数组不可以直接在 if 语句中用> < = 运算符进行比对大小。但是可以利用 compareTo的特点进行返回。
      compareTo比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数正数

    案例三:在这里插入图片描述
    请使用String数组解答:

    	public static void main(String[] args) {
    				String[] arr = {"a","b","c","e","f","p","u","z"};
    				//与上一个程序不同之处在于用的是String数组;
    				System.out.println("原数组:" + Arrays.toString(arr));
    				System.out.print("待插入字母:");
    				Scanner sc = new Scanner(System.in);
    				String number = sc.nextLine();
    				int index = 0;
    				String[] newarr = Arrays.copyOf(arr, arr.length + 1);
    
    				for (int i = 0; i < newarr.length - 1; i++) {
    					if (number.compareTo(newarr[i]) <= 0) {
    						index = i;
    						break;
    					}
    				}
    
    				System.out.println("插入字母下标:" + index);
    
    				for (int i = newarr.length-1; i > index; i--) {
    					newarr[i] = newarr[i-1];
    
    				}
    				newarr[index] = number;
    				System.out.println("插入后数组为:"+Arrays.toString(newarr));
    			
    
    		
    
    	}
    

    输出结果:

    原数组:[a, b, c, e, f, p, u, z]
    待插入字母:m
    插入字母下标:5
    插入后数组为:[a, b, c, e, f, m, p, u, z]
    

    仅供参考

    Arrays.toString知识点复习:

    static String toString(boolean[] a)
      返回指定数组内容的字符串表示形式。
    static String toString(byte[] a)
       返回指定数组内容的字符串表示形式。
    static String toString(char[] a)
       返回指定数组内容的字符串表示形式。
    static String toString(double[] a)
       返回指定数组内容的字符串表示形式。
    static String toString(float[] a)
       返回指定数组内容的字符串表示形式。
    static String toString(int[] a)
       返回指定数组内容的字符串表示形式。
    static String toString(long[] a)
       返回指定数组内容的字符串表示形式。
    static String toString(Object[] a)
       返回指定数组内容的字符串表示形式。
    static String toString(short[] a)
       返回指定数组内容的字符串表示形式。

    展开全文
  • Java序列化与反序列是什么? Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程: 序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的...

    Java序列化与反序列化是什么?

    Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程:

    • 序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。核心作用是对象状态的保存与重建。

    • 反序列化:客户端从文件中或网络上获得序列化后的对象字节流,根据字节流中所保存的对象状态及描述信息,通过反序列化重建对象。

    为什么需要序列化与反序列化?

    为什么要序列化,那就是说一下序列化的好处喽,序列化有什么什么优点,所以我们要序列化。

    一:对象序列化可以实现分布式对象。

    主要应用例如:RMI(即远程调用Remote Method Invocation)要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样。

    二:java对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。

    可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的"深复制",即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。

    三:序列化可以将内存中的类写入文件或数据库中。

    比如:将某个类序列化后存为文件,下次读取时只需将文件中的数据反序列化就可以将原先的类还原到内存中。也可以将类序列化为流数据进行传输。

    总的来说就是将一个已经实例化的类转成文件存储,下次需要实例化的时候只要反序列化即可将类实例化到内存中并保留序列化时类中的所有变量和状态。

    四:对象、文件、数据,有许多不同的格式,很难统一传输和保存。

    序列化以后就都是字节流了,无论原来是什么东西,都能变成一样的东西,就可以进行通用的格式传输或保存,传输结束以后,要再次使用,就进行反序列化还原,这样对象还是对象,文件还是文件。

    如何实现Java序列化与反序列化

    首先我们要把准备要序列化类,实现 Serializabel接口

    例如:我们要Person类里的name和age都序列化

    import java.io.Serializable;
    
    public class Person implements Serializable { //本类可以序列化
    
        private String name;
        private int age;
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String toString() {
            return "姓名:" + this.name + ",年龄" + this.age;
        }
    }
    

    然后:我们将name和age序列化(也就是把这两个对象转为二进制,理解为“打碎”)

    package com.ohc.oos;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.ObjectOutputStream;
    
    
    public class ObjectOutputStreamDemo { //序列化
        public static void main(String[] args) throws Exception {
            //序列化后生成指定文件路径
            File file = new File("D:" + File.separator + "person.ser");
            ObjectOutputStream oos = null;
            //装饰流(流)
            oos = new ObjectOutputStream(new FileOutputStream(file));
    
            //实例化类
            Person per = new Person("张三", 30);
            oos.writeObject(per); //把类对象序列化
            oos.close();
        }
    }
    
    展开全文
  • 什么是序列化和反序列化?

    千次阅读 2021-02-03 10:04:57
    对象转换为有序字节流,以便在网络上传输或者保存在本地文件中。 反序列化的最重要的作用:根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。 总结:核心作用就是对象状态的保存和重建。(整个过程...
  • 1、什么是序列化和反序列化 (1)Java序列指把Java对象转换为字节序列的过程,而Java反序列指把字节序列恢复为Java对象的过程; (2)序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证...
  • Java序列化与反序列是什么? Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程: 序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的...
  • 1、什么是序列化和反序列化 (1)Java序列指把Java对象转换为字节序列的过程,而Java反序列指把字节序列恢复为Java对象的过程; (2)**序列化:**对象序列化的最主要的用处就是在传递和保存对象的时候,...
  • Java序列化与反序列是什么? Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程: 序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的...
  • 序列是什么? 在python中,序列是指它的成员都是有序排列,并且可以通过下标偏移量访问到它的一个或几个成员。 序列有三种形式: 字符串(str),如“Hello world”,当然也可以用单引号 列表(list),如[10,...
  • SequenceInputStream:序列流,作用就是将多个读取流合并成一个读取流。...这样做,可以更方便的操作多个读取流,其实这个序列流内部会有一个有序的集合容器,用于存储多个读取流对象。 该对象的构造
  • Java序列化与反序列是什么? Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程: 序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的...
  • UDP无连接的,不可靠的,没有序列保证,但是一个快速传输的协议。 区别: 1.TCP提供的面向连接的、可靠的数据流传输;UDP提供的是非面向连接的、不可靠的数据流传输。 2.TCP提供可靠的服务,通过TCP连接传送...
  • 目录题目思路1思路2 这前几天做的一道笔试题,当时实现复杂了,导致最后超时,现在记录一下思路与实现方法...经过m次操作后,序列变成什么样子? 输入描述 输入包含m+1行。 第一行包含两个正整数n,m(1<=n,m...
  • 序列化 就是将字节序列转换为内存中的对象可以文件中的,也可以网络传输过来的。 作用 对象转换为有序字节流,方便在网络上传输和保存在本地文件中。在传递和保存对象时。保证对象的完整性和可传递性。 ...
  • 序列

    千次阅读 2013-02-26 18:12:22
    一、什么是序列 序列像表、视图一样,被称为数据库对象,它可以产生1、2、3、4……等等顺序增加的有序数。当然,也可以1,3,5,7……,也可以由大到小。只要是有序数列,都可以有序列产生。下面我们看一下序列的...
  • java为什么使用序列

    千次阅读 2018-07-12 10:58:23
    参考地址:https://blog.csdn.net/postersxu/article/details/784925231.什么是序列化? 从字面上理解就是有序,标准而整齐。想象我们中学时代的早操与大学入学时的军训的场景,我们排好队,迈着整齐的步伐进入操场...
  • 序列化和反序列

    2020-03-12 14:06:42
    一、什么是序列化和反序列化 (1 Java序列指把Java对象转换为字节序列的过程,而Java反序列指把字节序列恢复为Java对象的过程; (2 ** 序列化 :**对象序列化的最主要的用处就是在传递和保存对象的时候,...
  • 序列化与反序列

    2020-02-03 17:54:56
    什么是序列化 java序列指把java对象转换为字节序列的过程,而java反序列指把字节对象恢复为java对象的过程 序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。...
  • /* 你的代码将被嵌在这里 */ List Merge(List L1, List L2) { List p = L1->Next; //从第二个节点开始合并 List q = L2->Next; //注意到头结点空的,即L1,L2对应的存储单元...//为什么不是Node而是PtrToNo...
  • Java序列化与反序列

    2019-10-05 01:18:53
    1、什么是序列化和反序列化 (1)Java序列指把Java对象转换为字节序列的过程,而Java反序列指把字节序列恢复为Java对象的过程; (2)序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,320
精华内容 528
关键字:

有序序列是什么