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

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

文章目录

  • 一、面试题(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/875775.shtml

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

相关文章

学习React(描述 UI)

React 是一个用于构建用户界面&#xff08;UI&#xff09;的 JavaScript 库&#xff0c;用户界面由按钮、文本和图像等小单元内容构建而成。React 帮助你把它们组合成可重用、可嵌套的 组件。从 web 端网站到移动端应用&#xff0c;屏幕上的所有内容都可以被分解成组件。在本章…

优化医疗数据管理:Kettle ETL 数据采集方案详解

在现代医疗保健领域&#xff0c;数据的准确性、完整性和及时性对于提高医疗服务质量和患者护理至关重要。为了有效管理和利用医疗数据&#xff0c;Kettle ETL&#xff08;Extract, Transform, Load&#xff09;数据采集方案成为了许多医疗机构的首选工具之一。本文将深入探讨Ke…

【基础算法总结】队列 + 宽搜(BFS)

队列 宽搜BFS 1.N 叉树的层序遍历2.二叉树的锯齿形层序遍历3.二叉树最大宽度4.在每个树行中找最大值 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#…

MySQL作业五

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

java数据结构之排序

前言&#xff1a; 排序在我们日常生活中随处可见&#xff0c;这里将介绍java数据结构里面常见的几种排序。 ps: swap函数的实现&#xff1a; public void swap(int[] arr, int i, int j) {int tmp arr[i];arr[i] arr[j];arr[j] tmp; } 1.直接插入排序 &#xff08;1&a…

类与对象(补充)

初始化列表 1. 之前我们实现构造函数时&#xff0c;初始化成员变量主要使用函数体内赋值&#xff0c;构造函数初始化还有一种方式&#xff0c;就是初始化列表&#xff0c;初始化列表的使用方式是以一个冒号开始&#xff0c;接着是一个以逗号分隔的数据成员列表&#xff0c;每个…

【OpenCV C++20 学习笔记】序列化——XML和YAML文件处理

序列化——XML和YAML文件处理 序列化和反序列化代码实现XML/YAML文件的打开和关闭写入或读取文本和数字写入或读取OpenCV数据写入或读取数组以及map读取和写入自定义数据类型 输出结果 序列化和反序列化 如果希望永久保存某些对象&#xff0c;而不是每次运行程序的时候重新创建…

经典文献阅读之--LIV-GaussMap(实时3D辐射场地图渲染的LiDAR惯性视觉融合算法)

Tip: 如果你在进行深度学习、自动驾驶、模型推理、微调或AI绘画出图等任务&#xff0c;并且需要GPU资源&#xff0c;可以考虑使用UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU&#xff0c;按时收费每卡2.6元&#xff0c;月卡只需要1.7元每小时&…

如何优化网站以提升UX设计质量

什么叫 UX 设计&#xff1f;UX 设计&#xff0c;即用户体验设计&#xff0c;是指为提升用户体验而进行的产品设计。 UX 在设计中&#xff0c;设计师通过调查和研究用户来掌握用户的需求和喜好&#xff0c;并利用这些信息来设计产品。设计师还会测试产品&#xff0c;以确保它们能…

学习笔记之Java篇(0725)

p this 普通方法中&#xff0c;this总是指向调用该方法的对象。 构造方法中&#xff0c;this总是指向正要初始化的对象。 this&#xff08;&#xff09;调用必须重载的构造方法&#xff0c;避免相同地址初始化代码&#xff0c;但只能在构造方法中用&#xff0c;比企鹅必须位…

不让录制的屏幕如何绕开?轻松突破录屏限制:三招搞定App录屏难题

在数字时代&#xff0c;屏幕录制已成为分享知识和记录重要信息的必备技能。然而&#xff0c;有些应用程序出于版权保护或其他原因&#xff0c;限制了屏幕录制功能。这是否意味着我们束手无策呢&#xff1f;当然不是&#xff01;本文将为您揭秘三种简单易行的方法&#xff0c;让…

html+css前端作业 王者荣耀官网1个页面(带报告)

htmlcss前端作业 王者荣耀官网1个页面&#xff08;带报告&#xff09; 下载地址 https://download.csdn.net/download/qq_42431718/89575045 目录1 目录2 项目视频 王者荣耀首页1个页面&#xff08;无js&#xff09; 页面1

【QT】SARibbon编译安装开启frameless(QWindowkit)

1.cmake开启frameless 2.检查cmakecache 3.下载编译qwindowkit 拉取saribbon时请 git clone https://github.com/czyt1988/SARibbon.git --recursive使用--recursive可以拉取第三方库 手动下载&#xff1a;https://github.com/stdware/qwindowkit 4.cmake构建 和 visual stu…

2024-07-24 Linux C語言使用inotify进行文件变化检测

一、在Linux中&#xff0c;用C语言检测文件内容变化的方法有几种&#xff0c;最常用的包括以下几种&#xff1a; 轮询&#xff08;Polling&#xff09;&#xff1a;周期性地读取文件并检查内容是否变化。inotify&#xff1a;使用Linux内核提供的inotify接口&#xff0c;这是一…

Java项目中整合多个pdf合并为一个pdf

一、Java项目中整合多个pdf合并为一个pdf gitee笔记路径&#xff1a;https://gitee.com/happy_sad/drools一、依赖导入 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.6</version> …

Centos8 yum 更换源以及安装内核头文件

文章目录 一、简介二、yum 更换源三、安装内核头文件 一、简介 CentOS 是一个开源项目&#xff0c;发布了两个不同的 Linux 发行版——CentOS Stream 和 CentOS Linux 。 CentOS Stream 是即将发布的红帽企业 Linux 产品的上游开发平台。 CentOS 项目将于 2024 年 6 月 30 日…

嵌入式C++、ROS 、OpenCV、SLAM 算法和路径规划算法:自主导航的移动机器人流程设计(代码示例)

在当今科技迅速发展的背景下&#xff0c;嵌入式自主移动机器人以其广泛的应用前景和技术挑战吸引了越来越多的研究者和开发者。本文将详细介绍一个嵌入式自主移动机器人项目&#xff0c;涵盖其硬件与软件系统设计、代码实现及项目总结&#xff0c;并提供相关参考文献。 项目概…

基于区块链技术的高校教育资源共享的研究

&#xff08;一&#xff09;项目背景 时代变迁下的高教管理革新需求 当前&#xff0c;我国高等教育体系深受行政化管理模式影响&#xff0c;其在指引办学方向、资源优化配置及院校稳定上功不可没。然而&#xff0c;随着社会主义市场经济体系的深化发展&#xff0c;该模式逐渐显…

电脑录屏直播怎么录?3款软件推荐,达人必备

电脑录屏直播成为了一种新型、有趣且高效的传播方式。想象一下&#xff0c;当您喜欢的游戏博主进行精彩有趣的游戏直播&#xff0c;而您却因为没时间将要错过这场精彩绝伦的直播。这时&#xff0c;一款好用的录屏软件是您的必需品&#xff0c;电脑录屏能让您不再错过屏幕上的精…

学习记录701@org.hibernate.MappingException: No Dialect mapping for JDBC

使用spring data jpa 时报错&#xff1a;javax.persistence.PersistenceException: org.hibernate.MappingException: No Dialect mapping for JDBC type: 0。 但是在数据库中sql是可以执行的。 我是用的是原生查询&#xff1a; Query query entityManager.createNativeQuer…