【数据结构】顺序表(杨辉三角、简单的洗牌算法)

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

文章目录

  • 一、面试题(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://xiahunao.cn/news/3266386.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

纬创软件赞助 | 两岸曲艺青年汇在台湾会馆举办

7月6日下午&#xff0c;北京台湾会馆处处洋溢着掌声、笑声、欢呼声。由中国曲艺家协会、北京市台联主办&#xff0c;北京国际和平文化基金会、相声天团、吴兆南相声剧艺社、北京德云社文化传播有限公司等协办的“艺道同欢”两岸曲艺青年汇在这里隆重举办。纬创软件赞助了本次活…

生成式人工智能代理 AI Agent:从思维到行动的技术飞跃

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

利用换元法计算积分的常见题型(考研高数复习)

考研中常见的几种换元法积分计算题 (1)被积式仅包含一个根式&#xff1a;根号下为有 a a a 和 x x x 的平方和/平方差 此种类型的积分题型&#xff0c;可以通过构造单个锐角大小为 t t t 的直角三角形&#xff0c;利用勾股定理和三角函数进行代换。 平方和的情况 形如 ∫…

opencascade AIS_ManipulatorOwner AIS_MediaPlayer源码学习

前言 AIS_ManipulatorOwner是OpenCascade中的一个类&#xff0c;主要用于操纵对象的交互控制。AIS_ManipulatorOwner结合AIS_Manipulator类&#xff0c;允许用户通过可视化工具&#xff08;如旋转、平移、缩放等&#xff09;来操纵几何对象。 以下是AIS_ManipulatorOwner的基…

32单片机开发bootloader程序

一&#xff0c;单片机为什么要使用bootloader 1、使用bootloader的好处 1) 程序隔离&#xff1a;可以同时存在多个程序&#xff0c;只要flash空间够大&#xff0c;或者通过外挂flash&#xff0c;可以实现多个程序共存&#xff0c;在多个程序之间切换使用。 2&#xff09;方便程…

JavaWeb学习——请求响应、分层解耦

目录 一、请求响应学习 1、请求 简单参数 实体参数 数组集合参数 日期参数 Json参数 路径参数 总结 2、响应 ResponseBody&统一响应结果 二、分层解耦 1、三层架构 三层架构含义 架构划分 2、分层解耦 引入概念 容器认识 3、IOC&DI入门 4、IOC详解 …

STM32-寄存器DMA配置指南

配置步骤 在STM32F0xx中文参考手册中的DMA部分在开头给出了配置步骤 每个通道都可以在外设寄存器固定地址和存储器地址之间执行 DMA 传输。DMA 传输的数据 量是可编程的&#xff0c;最大达到 65535。每次传输之后相应的计数寄存器都做一次递减操作&#xff0c;直到 计数为&am…

PHP基础语法-Part1

脚本格式 PHP脚本以<?php开头&#xff0c;以?>结尾&#xff1b; PHP语句以分号结尾&#xff08;;&#xff09; PHP是解释型语言&#xff1b; 输入和输出 获取用户的输入&#xff1a; $input readline("input:"); echo $input; echo "input:";…

MySQL作业五

1. 创建表goods&#xff0c;orders 2. 向商品表中插入商品记录 3. 触发器操作 3.1 建立触发器&#xff0c;订单表中增加订单数量后&#xff0c;商品表商品数量同步减少对应的商品订单出数量,并测试 3.2 建立触发器&#xff0c;实现功能:客户取消订单&#xff0c;恢复商品表对应…

物联网精密空调监控指标解读:佳力图(MEAUO702M)

监控易作为一款功能强大的IT和物联网设备监控软件&#xff0c;能够实时监控各类IT资源和物联网设备的运行状态&#xff0c;为用户提供准确、及时的监控数据&#xff0c;确保系统的稳定运行。在物联网精密空调领域&#xff0c;监控易对佳力图(MEAUO702M)精密空调进行了全面的监控…

【中项】系统集成项目管理工程师-第5章 软件工程-5.3软件设计

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…

崖山异构数据库迁移利器YMP初体验-Oracle迁移YashanDB

前言 首届YashanDB「迁移体验官」开放后&#xff0c;陆续收到「体验官」们的投稿&#xff0c;小崖在此把优秀的投稿文章分享给大家~今天分享的用户文章是《崖山异构数据库迁移利器YMP初体验-Oracle迁移YashanDB》&#xff08;作者&#xff1a;小草&#xff09;&#xff0c;满满…

深度解读大语言模型中的Transformer架构

一、Transformer的诞生背景 传统的循环神经网络&#xff08;RNN&#xff09;和长短期记忆网络&#xff08;LSTM&#xff09;在处理自然语言时存在诸多局限性。RNN 由于其递归的结构&#xff0c;在处理长序列时容易出现梯度消失和梯度爆炸的问题。这导致模型难以捕捉长距离的依…

【树状数组】2659. 将数组清空

本文涉及知识点 树状数组 LeetCode2659. 将数组清空 给你一个包含若干 互不相同 整数的数组 nums &#xff0c;你需要执行以下操作 直到数组为空 &#xff1a; 如果数组中第一个元素是当前数组中的 最小值 &#xff0c;则删除它。 否则&#xff0c;将第一个元素移动到数组的…

pytest结合allure-pytest插件生成测试报告

目录 一、安装allure-pytest插件 二、下载allure 三、生成allure报告 四、效果展示 一、安装allure-pytest插件 二、下载allure 下载之后解压&#xff0c;解压之后还要配置环境变量&#xff08;把allure目录下bin目录配置到系统变量的path路径&#xff09;&#xff0c;下…

代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙

代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙 文章目录 代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙17.太平洋大西洋水流问题一、DFS二、BFS三、本题总结 82…

如何在测试中保护用户隐私!

在当今数据驱动的时代&#xff0c;用户隐私保护成为了企业和开发团队关注的焦点。在软件测试过程中&#xff0c;处理真实用户数据时保护隐私尤为重要。本文将介绍如何在测试中保护用户隐私&#xff0c;并提供具体的方案和实战演练。 用户隐私保护的重要性 用户隐私保护不仅是法…

Docker安装kkFileView实现在线文件预览

kkFileView为文件文档在线预览解决方案,该项目使用流行的spring boot搭建,易上手和部署,基本支持主流办公文档的在线预览,如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等 官方文档地址:https://kkview.cn/zh-cn/docs/production.html 一、拉取镜像 do…

ubuntu光盘启动报错 Initramfs unpacking failed:write error ...No working init found

在FreeBSD的bhyve虚拟机里&#xff0c;使用ubuntu光盘启动&#xff0c;报错 Initramfs unpacking failed:write error Failed to execute /init.(error -2) Kernel panic -not syncing:No working init found . Try passing initoption to kernel .See Linux Documentation …

iOS ------ Block的相关问题

Block的定义 Block可以截获局部变量的匿名函数&#xff0c; 是将函数及其执行上下文封装起来的对象。 Block的实现 通过Clang将以下的OC代码转化为C代码 // Clang xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m//main.m #import <Foundation/Foundation.…