【数据结构刷题】顺序表与ArrayList

【数据结构刷题】顺序表与ArrayList

  • [1. 杨辉三角](#1. 杨辉三角)
  • [2. 合并两个有序数组](#2. 合并两个有序数组)

1. 杨辉三角

LC链接:杨辉三角

java 复制代码
//杨辉三角

import java.util.ArrayList;
import java.util.List;

public class Demo1 {
    public List<List<Integer>> generate(int numRows) {
            List<List<Integer>> result = new ArrayList<>();
        for (int i = 0; i < numRows; i++) {//构造 numRows 行
            List<Integer> row = new ArrayList<Integer>();//向上转型:ArrayList是具体实现的子类,List是更上层的父类(接口)
            for (int j = 0; j < i + 1; j++) {
                if(j == 0 || j == i){//杨辉三角的第一列和最后一列,都是1
                    row.add(1);
                }else {
                    //一般的列,值为:result[i-1][j-1] + result[i-1][j]
                    int current = result.get(i-1).get(j-1) + result.get(i-1).get(j);
                    row.add(current);
                }
            }
            //此处,已经把一行构造好了,只需要把这一行整体 添加到 result 中
            result.add(row);
        }
        return result;
    }
    public static void main(String[] args) {
        Demo1 demo = new Demo1();
        List<List<Integer>> result= demo.generate(5);
        System.out.println(result);
    }
}

输出结果:

2. 合并两个有序数组

牛客链接:合并两个有序数组

java 复制代码
import java.util.Arrays;

//合并两个有序数组
public class Demo2 {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        // end1、end2:分别标记nums1 和 nums2最后一个有效元素位置
        // end标记nums1的末尾,因为nums1和nums2中的元素从后往前往nums1中存放,否则会存在数据覆盖
        int end1 = m-1;
        int end2 = n-1;
        int end = nums1.length-1;

        // 从后往前遍历,将num1或者nums2中较大的元素往num1中end位置搬移
        // 直到将num1或者num2中有效元素全部搬移完
        while(end1 >= 0 && end2 >= 0){
            if(nums1[end1] > nums2[end2]){
                nums1[end--] = nums1[end1--];
            }else{
                nums1[end--] = nums2[end2--];
            }
        }

        // 如果nums2中的数据没有搬移完,搬移剩余nums中的元素
        while(end2 >= 0){
            nums1[end--] = nums2[end2--];
        }

        // num1中可能有数据没有搬移完,不用管,因为这些元素已经在nums1中了
    }

    public static void main(String[] args) {
        Demo2 merger = new Demo2();

        // 测试用例1: 正常情况
        int[] nums1 = {1, 2, 3, 0, 0, 0};
        int[] nums2 = {2, 5, 6};
        merger.merge(nums1, 3, nums2, 3);
        System.out.println("测试1 - 正常合并: " + arrayToString(nums1));
        // 预期: [1, 2, 2, 3, 5, 6]

        // 测试用例2: nums2为空
        nums1 = new int[]{1, 2, 3};
        nums2 = new int[]{};
        merger.merge(nums1, 3, nums2, 0);
        System.out.println("测试2 - nums2为空: " + arrayToString(nums1));
        // 预期: [1, 2, 3]

        // 测试用例3: nums1初始为空
        nums1 = new int[]{0, 0, 0};
        nums2 = new int[]{1, 2, 3};
        merger.merge(nums1, 0, nums2, 3);
        System.out.println("测试3 - nums1初始为空: " + arrayToString(nums1));
        // 预期: [1, 2, 3]

        // 测试用例4: 有重复元素
        nums1 = new int[]{1, 2, 2, 0, 0};
        nums2 = new int[]{2, 3};
        merger.merge(nums1, 3, nums2, 2);
        System.out.println("测试4 - 有重复元素: " + arrayToString(nums1));
        // 预期: [1, 2, 2, 2, 3]

        // 测试用例5: nums1所有元素小于nums2
        nums1 = new int[]{1, 2, 3, 0, 0};
        nums2 = new int[]{4, 5};
        merger.merge(nums1, 3, nums2, 2);
        System.out.println("测试5 - nums1全部小于nums2: " + arrayToString(nums1));
        // 预期: [1, 2, 3, 4, 5]

        // 测试用例6: nums2所有元素小于nums1
        nums1 = new int[]{4, 5, 6, 0, 0};
        nums2 = new int[]{1, 2};
        merger.merge(nums1, 3, nums2, 2);
        System.out.println("测试6 - nums2全部小于nums1: " + arrayToString(nums1));
        // 预期: [1, 2, 4, 5, 6]
    }

    // 辅助方法,用于美化数组输出
    private static String arrayToString(int[] arr) {
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            sb.append(arr[i]);
            if (i < arr.length - 1) {
                sb.append(", ");
            }
        }
        sb.append("]");
        return sb.toString();
    }
}

输出结果:

相关推荐
wuyk55520 小时前
3.链表:用指针串联的动态数据结构
c语言·开发语言·数据结构·链表
郝学胜-神的一滴20 小时前
干货版《算法导论》17:二叉树核心原理、遍历逻辑与高阶实操全解
数据结构·c++·python·算法·计算机·编程
疯狂打码的少年21 小时前
【数据结构】二叉树的性质(五大性质+计算)
数据结构·笔记·算法
wabs66621 小时前
关于图论【A*算法 | 卡码网127.骑士的攻击的思考】
数据结构·算法·图论·卡码网·广搜的改进版
凉茶钱1 天前
【数据结构】堆的应用
c语言·数据结构
间歇性努力持续性发呆的野生快乐选手1 天前
栈的性质(进栈,出栈,访问)
数据结构·c++
m0_547486661 天前
《数据结构与算法》全套PPT课件2026(中国海洋大学)
数据结构·算法
旖旎夜光1 天前
LeetCode 904:水果成篮(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
我变成萤火虫1 天前
河南萌新联赛2026第(三)场:郑州轻工业大学
数据结构·c++·算法·贪心算法·stl·深度优先·哈希算法
白狐_7981 天前
408数据结构第7章:B树①——基础概念与结构
数据结构·b树