当前位置: 首页 > news >正文

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

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

  • 1. 杨辉三角
  • 2. 合并两个有序数组

1. 杨辉三角

LC链接:杨辉三角
在这里插入图片描述

//杨辉三角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){//杨辉三角的第一列和最后一列,都是1row.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. 合并两个有序数组

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

在这里插入图片描述

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所有元素小于nums2nums1 = 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所有元素小于nums1nums1 = 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();}
}

输出结果:

在这里插入图片描述

http://www.xdnf.cn/news/158239.html

相关文章:

  • Linux下编译并打包MNN项目迁移至其他设备
  • Qt动态库信号崩溃问题解决方案
  • Leetcode刷题 由浅入深之哈希法——202. 快乐数
  • 机器学习(10)——神经网络
  • 《Python Web部署应知应会》Flask网站隐藏或改变浏览器URL:从Nginx反向代理到URL重写技术
  • 【人工智能之大模型】详述大模型中​AWQ(Activation-aware Weight Quantization)量化的关键步骤?
  • Three.js + React 实战系列-3D 个人主页:构建 Hero 场景组件(项目核心)✨
  • Github 2025-04-26 Rust开源项目日报Top10
  • 学习笔记——《Java面向对象程序设计》-内部类、匿名类、异常类
  • 解决Ubuntu下使用CLion构建Qt项目时找不到已安装的模块的问题
  • AI编程案例拆解|基于机器学习XX评分系统-后端篇
  • 【数据可视化-35】全球太空探索数据集(2000-2025)可视化分析
  • 通过门店销售明细表用PySpark得到每月每个门店的销冠和按月的同比环比数据
  • 数据预处理之特征选择 (Feature Selection)
  • java函数式接口与方法引用
  • Nacos简介—3.Nacos的配置简介
  • SQL盲注问题深度解析与防范策略
  • 逆向|dy|a_bogus|1.0.1.19-fix.01
  • IDE使用技巧与插件推荐
  • LLM(大语言模型)技术的最新进展可总结
  • ShaderToy学习笔记 02.圆
  • HTTP, AMQP, MQTT之间的区别和联系是什么?华为云如何适配?
  • iperf网络性能测试
  • OpenCV第6课 图像处理之几何变换(缩放)
  • compose 二维码扫描qrcode
  • 进制转换编程实现
  • Eclipse 插件开发 3 菜单栏
  • Java数据结构——Stack
  • Gin框架
  • 【股票系统】使用docker本地构建ai-hedge-fund项目,模拟大师炒股进行分析。人工智能的对冲基金的开源项目