【数据结构】顺序表(ArrayList的具体使用)

🎇🎉🎉🎉点进来你就是我的人了
博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!
欢迎志同道合的朋友一起加油喔 💪💪💪
谢谢你这么帅气美丽还给我点赞!比个心**

文章目录

  • 一、面试题(CVTE)
    • 1. 题目描述
    • 2. 要求及解析
    • 3. 代码展示
    • 4. 注意点
  • 二、杨辉三角
    • 1. 题目
    • 2. 画图解析
    • 3. 知识点
    • 4. 代码展示
  • 三、简单的洗牌算法
    • 1. 理解怎么玩扑克牌
    • 2. 抽象出一张扑克牌
    • 3. 买牌
    • 4. 洗牌
    • 5. 发牌
    • 6. 测试类
    • 7. 对牌进行操作方法的完整代码
  • 四、移除元素
    • 1. 示例 1:
    • 2. 示例 2:
    • 3. 求解代码

一、面试题(CVTE)

1. 题目描述

有两个字符串字符串1: welcome to cvte  字符串2: come结果:   wl t vt

2. 要求及解析

要求删除字符串1中所包含的字符串2中的字符
即删除字符串1中所有的c o  m e 这四个字符

在这里插入图片描述

3. 代码展示

package test;
import java.util.ArrayList;
import java.util.List;
public class Test {public static void main(String[] args) {List<Character> arrayList = new ArrayList<>();String str1 = "welcome to cvte";String str2 = "come";List<Character> ret = func(str1, str2);//利用 for - each 循环for (char ch : ret){System.out.print(ch);}System.out.println();}private static List<Character> func(String str1, String str2) {List<Character> list = new ArrayList<>();//首先遍历 str1for (int i = 0; i < str1.length(); i++) {//取出来str1中的每个字符char ch = str1.charAt(i);//在 str2 中进行判断是否存在if (!str2.contains(ch + "")){list.add(ch);}}return list;}
}

4. 注意点

以下两行代码有什么区别在使用上?

List<Character> arrayList = new ArrayList<>();
//只能调用接口当中的方法ArrayList<Character> arrayList1 = new ArrayList<>();
//可以调用当前类自己的方法和接口当中的方法

在这里插入图片描述

二、杨辉三角

杨辉三角

1. 题目

在这里插入图片描述

2. 画图解析

在这里插入图片描述

3. 知识点

 List<List<Integer>> ret = new ArrayList<>();//定义了一个二维数组

在这里插入图片描述

4. 代码展示

class Solution {public List<List<Integer>> generate(int numRows) {List<List<Integer>> ret = new ArrayList<>();//第一行 数组//在二维数组里面 第一行数组的下标为 0List<Integer> list = new ArrayList<>();list.add(1);//把第一行一维数组放到 二位数组的 0 下标ret.add(list);//处理其他行for (int i = 1; i < numRows; i++) {//每循环一次 就是 一行//创建一个一维数组List<Integer> curRow = new ArrayList<>();curRow.add(1);//每一行的第一个元素//处理中间的数字//要获取上一行一维数组List<Integer> prevRow = ret.get(i - 1);//从第二列开始for (int j = 1; j < i; j++) {int x = prevRow.get(j) + prevRow.get(j - 1);curRow.add(x);}//处理最后一个数字curRow.add(1);ret.add(curRow);}return ret;}
}

三、简单的洗牌算法

1. 理解怎么玩扑克牌

买牌、洗牌,发牌(根据人数)

在这里插入图片描述

2. 抽象出一张扑克牌

package demo;//抽象出来一张牌public class Card {public String suit;//花色public int num;//数字//如果要构造一张牌,要提供构造方法public Card(String suit, int num) {this.suit = suit;this.num = num;}@Overridepublic String toString() {
//        return "Card{" +
//                "suit='" + suit + '\'' +
//                ", num=" + num +
//                '}';return suit + "" + num;}
}

3. 买牌

//定义扑克牌的4种花色  红桃,梅花,方块,黑桃public static String[] suits = {"♥","♣","♦","♠"};//首先需要买牌,没有牌这怎么玩//买的牌放到哪里呢/*** 生成一副扑克牌* 52张 不包含大小王* 4种花色 每种花色 13 张* @return*/public List<Card> buyCard(){List<Card> cardList = new ArrayList<>();for (int i = 0; i < 4; i++) {for (int j = 1; j <= 13; j++) {
//                String suit = suits[i];
//                //实例化一张扑克牌
//                Card card = new Card(suit,j);
//                cardList.add(card);cardList.add(new Card(suits[i],j));}}return cardList;}

4. 洗牌

在这里插入图片描述

//洗牌 ---》》传一副扑克牌//洗牌需要什么呢? ---》》 扑克牌//扑克牌在哪放着呢? ----》》数组里面public void shuffle(List<Card> cardList){//首先需要有随机数Random rand = new Random();for (int i = cardList.size() - 1; i > 0 ; i--) {int index = rand.nextInt(i);//在这里用 swap 方法进行交换swap(cardList,i,index);}}private static void swap(List<Card> cardList,int i,int j) {//首次从数组里面获取i下标的牌//利用面向对象的方式去做Card tmp = cardList.get(i);cardList.set(i,cardList.get(j));cardList.set(j,tmp);}

5. 发牌

/*** 发牌* 3个人,每个人轮流抓 5 张牌* 1.每个人拿到的牌放到哪里?* 2.什么叫做 每个人轮流抓 5 张牌?* @param cardList*/public List<List<Card>> getCard(List<Card> cardList){List<List<Card>> hand = new ArrayList<>();//应该有 三个 一维数组,三位玩家放各自的扑克牌List<Card> hand1 = new ArrayList<>();List<Card> hand2 = new ArrayList<>();List<Card> hand3 = new ArrayList<>();hand.add(hand1);hand.add(hand2);hand.add(hand3);//每个人抓5次//利用for循环for (int i = 0; i < 5; i++) {//每一次有三个人for (int j = 0; j < 3; j++) {//怎么揭牌???//相当于每次 拿 0下标的牌(删除0下标的牌就行)Card card = cardList.remove(0);//放到对应人的手里hand.get(j).add(card);}}return hand;}

6. 测试类

package demo;import java.util.List;public class Main {public static void main(String[] args) {CardGame cardGame = new CardGame();List<Card> ret = cardGame.buyCard();System.out.println("买牌:");System.out.println(ret);System.out.println("洗牌:");cardGame.shuffle(ret);System.out.println(ret);System.out.println("发牌:");List<List<Card>> hand = cardGame.getCard(ret);
//        for (List<Card> cards : hand){
//            System.out.println(cards);
//        }for (int i = 0; i < hand.size(); i++) {System.out.println("第" + (i + 1) + "个人的牌为:");System.out.println(hand.get(i));}System.out.println("剩下的牌:");System.out.println(ret);}
}

7. 对牌进行操作方法的完整代码

package demo;import java.util.ArrayList;
import java.util.List;
import java.util.Random;import static java.util.Collections.swap;public class CardGame {//定义扑克牌的4种花色  红桃,梅花,方块,黑桃public static String[] suits = {"♥","♣","♦","♠"};//首先需要买牌,没有牌这怎么玩//买的牌放到哪里呢/*** 生成一副扑克牌* 52张 不包含大小王* 4种花色 每种花色 13 张* @return*/public List<Card> buyCard(){List<Card> cardList = new ArrayList<>();for (int i = 0; i < 4; i++) {for (int j = 1; j <= 13; j++) {
//                String suit = suits[i];
//                //实例化一张扑克牌
//                Card card = new Card(suit,j);
//                cardList.add(card);cardList.add(new Card(suits[i],j));}}return cardList;}//洗牌 ---》》传一副扑克牌//洗牌需要什么呢? ---》》 扑克牌//扑克牌在哪放着呢? ----》》数组里面public void shuffle(List<Card> cardList){//首先需要有随机数Random rand = new Random();for (int i = cardList.size() - 1; i > 0 ; i--) {int index = rand.nextInt(i);//在这里用 swap 方法进行交换swap(cardList,i,index);}}private static void swap(List<Card> cardList,int i,int j) {//首次从数组里面获取i下标的牌//利用面向对象的方式去做Card tmp = cardList.get(i);cardList.set(i,cardList.get(j));cardList.set(j,tmp);}/*** 发牌* 3个人,每个人轮流抓 5 张牌* 1.每个人拿到的牌放到哪里?* 2.什么叫做 每个人轮流抓 5 张牌?* @param cardList*/public List<List<Card>> getCard(List<Card> cardList){List<List<Card>> hand = new ArrayList<>();//应该有 三个 一维数组,三位玩家放各自的扑克牌List<Card> hand1 = new ArrayList<>();List<Card> hand2 = new ArrayList<>();List<Card> hand3 = new ArrayList<>();hand.add(hand1);hand.add(hand2);hand.add(hand3);//每个人抓5次//利用for循环for (int i = 0; i < 5; i++) {//每一次有三个人for (int j = 0; j < 3; j++) {//怎么揭牌???//相当于每次 拿 0下标的牌(删除0下标的牌就行)Card card = cardList.remove(0);//放到对应人的手里hand.get(j).add(card);}}return hand;}
}

四、移除元素

  • 给你一个数组nums和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与val不同的元素的数量。

  • 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:

  • 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。

  • 返回k
    用户评测:

评测机将使用以下代码测试您的解决方案:
int[] nums = […]; // 输入数组
int val = …; // 要移除的值
int[] expectedNums = […]; // 长度正确的预期答案。
// 它以不等于 val 的值排序。
int k = removeElement(nums, val); // 调用你的实现
assert k == expectedNums.length;
sort(nums, 0, k); // 排序 nums 的前 k 个元素
for (int i = 0; i < actualLength; i++) {
assert nums[i] == expectedNums[i];
}
如果所有的断言都通过,你的解决方案将会 通过。

1. 示例 1:

输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2, _ , _ ]
解释:你的函数函数应该返回 k = 2, 并且 nums 中的前两个元素均为 2。
你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。

2. 示例 2:

输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,4,0,3, _ , _ , _ ]
解释:你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。
注意这五个元素可以任意顺序返回。
你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。

提示:
0 <= nums.length <= 100
0 <= nums[i] <= 50
0 <= val <= 100

3. 求解代码

class Solution {public int removeElement(int[] nums, int val) {//利用双指针int n = nums.length;int left = 0;for (int right = 0; right < n; right++) {if (nums[right] != val){nums[left] = nums[right];left++;}}return left;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874480.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VSCode STM32嵌入式开发插件记录

要卸载之前搭建的VSCode嵌入式开发环境了&#xff0c;记录一下用的插件。 1.Cortex-Debug https://github.com/Marus/cortex-debug 2.Embedded IDE https://github.com/github0null/eide 3.Keil uVision Assistant https://github.com/jacksonjim/keil-assistant/ 4.RTO…

政安晨【零基础玩转各类开源AI项目】基于Ubuntu系统部署MimicMotion :利用可信度感知姿势指导生成高质量人体运动视频

目录 项目介绍 项目相关工作 图像/视频生成的扩散模型 姿势引导的人体动作转移 生成长视频 方法实践 与最先进方法的比较 消融研究 部署验证 1. 下载项目&#xff1a; 2. 建立环境 3. 下载参数模型 A. 下载 DWPose 预训练模型&#xff1a;dwpose B. 从 Huggingfa…

DDD(3)-领域驱动设计之如何建模

前言 上一篇&#xff1a;从领域驱动到模型驱动中我们讨论到&#xff0c;领域驱动设计的核心思想是保持业务-模型-代码的一致性&#xff0c;模型作为沟通业务和代码的工具&#xff0c;至关重要&#xff0c;今天这篇文章就来讨论DDD中建模的一些思考和方法。 什么是建模 虽然看…

基于SSM的高考志愿选择辅助系统

基于SSM的高考志愿选择辅助系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 前台 前台首页 院校展示 后台 后台首页 学校管理 摘要 随着高考制度的不断完…

【Drone】drone编译web端 防墙策略 | 如何在被墙的状态drone顺利编译npm

一、drone编译防墙版本 1、web端drone kind: pipeline type: docker name: ui steps:- name: build_projectimage: node:20-slim depends_on: [clone]volumes:- name: node_modulespath: /drone/src/node_modulescommands:- pwd- du -sh *- npm config set registry https://…

测试——Selenium

内容大纲: 什么是自动化测试 什么是Selenium Selenium工作原理 Selenium环境搭建 Selenium API 目录 1. 什么是自动化测试 2. 什么是Selenium 3. Selenium工作原理 4. Selenium环境搭建(java) 5. Selenium API 5.1 定位元素 5.1.1 CSS选择器定位元素 5.1.2 XPath定位元…

k8s中部署nacos

1 部署nfs # 在k8s的主节点上执行 mkdir -p /appdata/download cd /appdata/download git clone https://github.com/nacos-group/nacos-k8s.git 将nacos部署到middleware的命名空间中 kubectl create namespace middleware cd /appdata/download/nacos-k8s # 创建角色 kub…

VScode连接虚拟机运行Python文件的方法

声明&#xff1a;本文使用Linux发行版本为rocky_9.4 目录 1. 在rocky_9.4最小安装的系统中&#xff0c;默认是没有tar工具的&#xff0c;因此&#xff0c;要先下载tar工具 2. 在安装好的vscode中下载ssh远程插件工具 3. 然后连接虚拟机 4. 查看python是否已经安装 5. 下载…

【状态估计】偏差,匹配和外点

我们都知道&#xff1a;对于状态的估计可能是有偏差的&#xff0c;特别是在运动模型或观测模型是非线性的情况下。在简单的立体相机的例子中&#xff0c;我们看到MAP方法相比于全贝叶斯方法来说是有偏差的。同时&#xff0c;我们也看到批量ML方法对于真实值来说也是有偏差的&am…

openEuler操作系统下Oracle 19c 从19.3补丁更新到19.17

Oracle 19c 从补丁19.3更新到19.17的过程涉及到多个步骤&#xff0c;包括备份、下载补丁、替换OPatch、验证清单信息、冲突检测、空间检测、应用补丁等。以下是一个概括性的流程&#xff0c;但请注意&#xff0c;具体步骤可能会根据实际的Oracle环境、补丁内容和Oracle的官方指…

【接口自动化_07课_Pytest+Excel+Allure完整框架集成_下】

目标&#xff1a;优化框架场景 1. 生成对应的接口关联【重点】 2. 优化URL基础路径封装【理解】 3. 利用PySQL操作数据库应用【理解】--- 怎么用python连接数据库、mysql 4. 通过数据库进行数据库断言【重点】 5. 通过数据库进行关联操作【重点】 一、接口关联&#xff1a…

【QAC】分布式部署下其他机器如何连接RLM

1、 文档目标 解决分布式部署下其他机器如何连接RLMLicense管理器。 2、 问题场景 分布式部署下QAC要在其他机器上单独运行扫描&#xff0c;必须先连接RLMLicense管理器&#xff0c;如何连接&#xff1f; 3、软硬件环境 1、软件版本&#xff1a;HelixQAC23.04 2、机器环境…

【算法/训练】:前缀和差分

&#x1f680; 前言&#xff1a; 前面我们已经通过 【算法/学习】前缀和&&差分-CSDN博客 学习了前缀和&&差分的效相关知识&#xff0c;现在我们开始进行相关题目的练习吧 1. 校门外的树 思路&#xff1a;给[0, n]的数组都标记为1&#xff0c;然后输出m行范围…

基于 PyTorch 的模型瘦身三部曲:量化、剪枝和蒸馏,让模型更短小精悍!

基于 PyTorch 的模型量化、剪枝和蒸馏 1. 模型量化1.1 原理介绍1.2 PyTorch 实现 2. 模型剪枝2.1 原理介绍2.2 PyTorch 实现 3. 模型蒸馏3.1 原理介绍3.2 PyTorch 实现 参考文献 1. 模型量化 1.1 原理介绍 模型量化是将模型参数从高精度&#xff08;通常是 float32&#xff0…

Elasticsearch:Retrievers 介绍 - Python Jupyter notebook

在今天的文章里&#xff0c;我是继上一篇文章 “Elasticsearch&#xff1a;介绍 retrievers - 搜索一切事物” 来使用一个可以在本地设置的 Elasticsearch 集群来展示 Retrievers 的使用。在本篇文章中&#xff0c;你将学到如下的内容&#xff1a; 从 Kaggle 下载 IMDB 数据集…

Linux云计算 |【第一阶段】SERVICES-DAY5

主要内容&#xff1a; 源码编译安装、rsync同步操作、inotify实时同步、数据库服务基础 实操前骤&#xff1a;&#xff08;所需tools.tar.gz与users.sql&#xff09; 1.两台主机设置SELinnx和关闭防火墙 setenforce 0 systemctl stop firewalld.service //停止防火墙 sy…

MySQL定时备份数据,并上传到oss

1.环境准备 1.安装阿里云的ossutil 2.安装mysql 2.编写脚本 脚本内容如下 #!/bin/bash # 数据库的配置信息&#xff0c;根据自己的情况进行填写 db_hostlocalhost db_usernameroot db_passwordroot db_namedb_root # oss 存贮数据的bucket地址 bucket_namerbsy-backup-buck…

软件更新的双刃剑:从”微软蓝屏”事件看网络安全的挑战与对策

引言 原文链接 近日&#xff0c;一场由微软视窗系统软件更新引发的全球性"微软蓝屏"事件震惊了整个科技界。这次事件源于美国电脑安全技术公司"众击"提供的一个带有"缺陷"的软件更新&#xff0c;如同一颗隐形炸弹在全球范围内引爆&#xff0c;…

Python面试宝典第17题:Z字形变换

题目 将一个给定字符串 s 根据给定的行数numRows &#xff0c;以从上往下、从左到右进行Z字形排列。比如&#xff1a;输入字符串为"PAYPALISHIRING"&#xff0c;行数为3时&#xff0c;排列如下。最后&#xff0c;你的输出需要从左往右逐行读取&#xff0c;产生出一个…

unity 实现图片的放大与缩小(根据鼠标位置拉伸放缩)

1创建UnityHelper.cs using UnityEngine.Events; using UnityEngine.EventSystems;public class UnityHelper {/// <summary>/// 简化向EventTrigger组件添加事件的操作。/// </summary>/// <param name"_eventTrigger">要添加事件监听的UI元素上…