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

算法-模拟

1、旋转数组

public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** 旋转数组* @param n int整型 数组长度* @param m int整型 右移距离* @param a int整型一维数组 给定数组* @return int整型一维数组*/public int[] solve (int n, int m, int[] a) {int left = 0;int right = n - 1;swap(left, right, a);// 在将0 到 m-1 交换left = 0;right = (m - 1) % n;swap(left, right, a);// 在将0 到 m-1 交换left = right + 1;right = n - 1;swap(left, right, a);return a;}private void swap(int left, int right, int[] a) {while (left < right) {int temp = a[left];a[left] = a[right];a[right] = temp;left ++;right --;}}
}

2、 螺旋矩阵

public ArrayList<Integer> spiralOrder (int[][] matrix) {ArrayList res = new ArrayList();if (matrix == null || matrix.length == 0) {return res;}int l = 0;int t = 0;int r = matrix[0].length - 1;int d = matrix.length - 1;while (l <= r && t <= d) {for (int i = l; i <= r; i++) {res.add(matrix[t][i]);}t++;if (t > d) {break;}for (int i = t; i <= d; i++) {res.add(matrix[i][r]);}r--;if (l > r) {break;}for (int i = r; i >= l; i--) {res.add(matrix[d][i]);}d--;if (t > d) {break;}for (int i = d; i >= t; i--) {res.add(matrix[i][l]);}l++;if (l > r) {break;}}return res;}

3、 顺时针旋转矩阵

public int[][] rotateMatrix (int[][] mat, int n) {//  1 2 3    // 7 4 1//  4 5 6    // 8 5 2//  7 8 9    // 9 6 3for (int i = 0; i < mat.length; i++) {for (int j = 0; j < i; j++) {int temp = mat[i][j];mat[i][j] = mat[j][i];mat[j][i] = temp;}}int columnNumber = mat[0].length;for (int i = 0; i < mat.length; i++) {for (int j = 0; j < columnNumber / 2; j++) {int temp = mat[i][j];mat[i][j] = mat[i][columnNumber - j - 1];mat[i][columnNumber - j - 1] = temp;}}return mat;
}

4、 设计LRU缓存结构

public class Solution {Map<Integer, Node> resultMap = new HashMap();Node head = new Node(-1,-1);Node last = new Node(-1,-1);int used = 0;int capacity;class Node {int key;int value;Node pre;Node next;Node(int key,int value) {this.value = value;this.key = key;}}public Solution(int capacity) {this.capacity = capacity;head.next = last;last.pre = head;}public int get(int key) {if (!resultMap.containsKey(key)) {return -1;}Node nodeTemp = resultMap.get(key);moveToHead(nodeTemp);return nodeTemp.value;}public void set(int key, int value) {if (!resultMap.containsKey(key)) {Node node = new Node(key,value);resultMap.put(key, node);if (used == capacity) {removeLast();} else {used++;}insertFirst(node);} else {resultMap.get(key).value = value;moveToHead(resultMap.get(key));}}private void moveToHead(Node node) {if (node.pre == head) {return;}node.pre.next = node.next;node.next.pre = node.pre;insertFirst(node);}private void insertFirst(Node node) {node.next = head.next;node.pre = head;head.next = node;node.next.pre = node;}private void removeLast() {resultMap.remove(last.pre.key);last.pre.pre.next = last;last.pre = last.pre.pre;}
}

5、 设计LFU缓存结构

public class Solution {//记录缓存剩余容量private int size = 0;private int minFreq = 1;Map<Integer, Node> nodeMap = new HashMap();Map<Integer, LinkedList<Node>> freNodeMap = new HashMap();class Node {int key;int value;int fre;Node(int key, int value, int fre) {this.key = key;this.value = value;this.fre = fre;}}/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** lfu design* @param operators int整型二维数组 ops* @param k int整型 the k* @return int整型一维数组*/public int[] LFU (int[][] operators, int k) {this.size = k;int length = (int)Arrays.stream(operators).filter(e->e[0] == 2).count();int[] res = new int[length];int index = 0;for (int i = 0; i < operators.length; i++) {int[] operatorsTemp = operators[i];if (operatorsTemp[0] == 1) {set(operatorsTemp[1], operatorsTemp[2]);} else {res[index++] = get(operatorsTemp[1]);}}return res;}private int get(int key) {int res = -1;if (nodeMap.containsKey(key)) {res = nodeMap.get(key).value;updateFreq(nodeMap.get(key));}return res;}private void set(int key, int value) {if (nodeMap.containsKey(key)) {nodeMap.get(key).value = value;updateFreq(nodeMap.get(key));} else {if (size == 0) {int oldKey = freNodeMap.get(minFreq).getLast().key;freNodeMap.get(minFreq).removeLast();if (freNodeMap.get(minFreq).isEmpty()) {freNodeMap.remove(minFreq);}nodeMap.remove(oldKey);} else {size --;}minFreq = 1;if (!freNodeMap.containsKey(minFreq)) {freNodeMap.put(minFreq, new LinkedList());}freNodeMap.get(minFreq).addFirst(new Node(key, value, 1));nodeMap.put(key, freNodeMap.get(minFreq).getFirst());}}private void updateFreq(Node node) {LinkedList linkedListNode = freNodeMap.get(node.fre);linkedListNode.remove(node);if (linkedListNode.isEmpty()) {freNodeMap.remove(linkedListNode);if (minFreq == node.fre) {minFreq = node.fre + 1;}}node.fre = node.fre + 1;if (!freNodeMap.containsKey(node.fre)) {freNodeMap.put(node.fre, new LinkedList());}freNodeMap.get(node.fre).addFirst(node);}
}

相关文章:

算法-模拟

1、旋转数组 public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** 旋转数组* param n int整型 数组长度* param m int整型 右移距离* param a int整型一维数组 给定数组* return int整型一维数组*/…...

如何通过Instagram群发消息高效拓展客户?

之前小S有跟大家说过关于独立站&#xff0b;Instagram如何高效引流&#xff0c;发现大家都对Instagram的话题挺关注的。Instagram作为全球最受欢迎的社交媒体之一&#xff0c;对于许多商家和营销人员来说&#xff0c;Instagram是一个不可忽视的营销平台&#xff0c;他们可以通过…...

基于springboot实现多线程抢锁的demo

1、本代码基于定时调度和异步执行同时处理&#xff0c;如果只加异步处理&#xff0c;会导致当前任务未执行完&#xff0c;下个任务到点也不会触发执行 Scheduled(fixedRate 50_000)Asyncpublic void testThread() throws Exception{ZkLock lock new ZkLock(zkJob.getZK(), &q…...

Java I/O模型发展以及Netty网络模型的设计思想

Java I/O模型发展以及Netty网络模型的设计思想 I/O模型Java BIOJava NIOJava AIO NIO Reactor网络模型单Reactor单线程模型单Reactor多线程模型主从Reactor多线程模型 Netty通信框架 前言&#xff1a; BIO、NIO的代码实践参考&#xff1a;Java分别用BIO、NIO实现简单的客户端服…...

智能电网时代:数字孪生的崭露头角

随着科技的不断进步&#xff0c;数字孪生已经开始在电力行业崭露头角&#xff0c;为这个关键的行业带来了前所未有的机遇和潜力。本文就带大家了解一下数字孪生在哪些方面为电力行业做出改变&#xff0c;以及未来的创新应用。 首先&#xff0c;数字孪生可以提高电力系统运营效率…...

每日一题 501二叉搜素树中的众数(中序遍历)

题目 给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;。 如果树中有不止一个众数&#xff0c;可以按 任意顺序 返回。 假定 BST 满足如下定义&a…...

测试理论与方法----测试流程第三个环节:设计测试用例

测试流程第三个环节&#xff1a;设计测试用例&#xff1a;怎么测<——>测试需求的提取&#xff1a;测什么 ### 5、测试用例 描述&#xff1a;测试用例(TestCase)&#xff1a;是一份关于【具体测试步骤】的文档&#xff0c;是为了达到最佳的测试效果或高效揭露软件中潜藏的…...

C++多态案例2----制作饮品

#include<iostream> using namespace std;//制作饮品的大致流程都为&#xff1a; //煮水-----冲泡-----倒入杯中----加入辅料//本案例利用多态技术&#xff0c;提供抽象类制作饮品基类&#xff0c;提供子类制作茶叶和咖啡class AbstractDrinking {public://煮水//冲水//倒…...

机械零件保养3d模拟演示打消客户购买顾虑

复杂机械的工作运转是复杂的&#xff0c;想要对机械有深度的理解和迭代&#xff0c;必须了解它的运转原理及参数&#xff0c;复杂机械运行原因教学存在着不可视、系统庞杂及知识点多等弊病&#xff0c;3D虚拟展示是基于web3d网页运行的三维页面&#xff0c;可以将复杂机械运行过…...

SpringBoot的自动装配源码分析

文章目录 一&#xff1a;什么是自动装配二、springboot的启动流程1.调用SpringApplication&#xff08;&#xff09;的构造方法2.执行核心run方法&#xff08;&#xff09;3.执行核心prepareContext&#xff08;&#xff09;4.执行核心refreshContext&#xff08;&#xff09;5…...

Linux常用命令——csplit命令

在线Linux命令查询工具 csplit 将一个大文件分割成小的碎片文件 补充说明 csplit命令用于将一个大文件分割成小的碎片&#xff0c;并且将分割后的每个碎片保存成一个文件。碎片文件的命名类似“xx00”&#xff0c;“xx01”。csplit命令是split的一个变体&#xff0c;split只…...

React 组件的3大属性: state

state 一、理解二、用途三、使用3.1、类初始化3.2、函数初始化 四、状态读更4.1、组件内部状态管理和数据更新4.2、state 和 props 一起使用 一、理解 组件被称为"状态机", 页面的显示是根据组件的state 属性的数据来显示。 state 是一个用于存储和管理组件内部数据的…...

vscode 上传项目到gitlab

第一步初始化项目 如果没有创建过分支&#xff08;创建分支这里不记录&#xff09;&#xff0c;默认是master分支&#xff1a; ①将所需要的上传的文件添加到暂存区&#xff0c;如图&#xff1a; ②填写一下注释信息&#xff0c;将暂存区的文件上传到本地分支&#xff08;没有创…...

[羊城杯 2020] easyphp

打开题目&#xff0c;源代码 <?php$files scandir(./); foreach($files as $file) {if(is_file($file)){if ($file ! "index.php") {unlink($file);}}}if(!isset($_GET[content]) || !isset($_GET[filename])) {highlight_file(__FILE__);die();}$content $_GE…...

QT 常用类与组件

0 思维导图 1 信息调试类&#xff08;QDebug&#xff09; #include "widget.h" #include<iostream> //printf #include<QDebug> //qDebuf using namespace std; //coutWidget::Widget(QWidget *parent): QWidget(parent) {//输出函数//使用…...

C#控制台连接Mysql数据库,有配置数据库连接字符串的配置文件

C#控制台连接Mysql数据库&#xff0c;有配置数据库连接字符串的配置文件 实现功能 读取..txt 中的配置文件&#xff0c;来初始化连接字符串让连接字符串的配置文件不存在会主动创建默认的连接字符串 注意点&#xff1a; 需要引用Newtonsoft使用mysql 代码如下 using Syst…...

PowerBuilder连接SQLITE3

PowerBuilder,一个古老的IDE,打算陆续发些相关的,也许还有人需要,内容可能涉及其他作者,但基本都是基于本人实践整理,如涉及归属,请联系. SQLite,轻型数据库,相对与PowerBuilder来说是个新事务,故发数来,以供参考. PB中使用OLE Microsoft OLE DB方式进行连接,如下 // Profile…...

Git 基本原理和常用操作

Git Git 是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。由 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开源的版本控制软件。 Git 常用操作 git 提交流程&#xff1a;工作区 -> git add 到暂存区 -> gi…...

单元测试和集成测试的区别

单元测试和集成测试是软件开发中常用的两种测试方法&#xff0c;它们的主要区别如下&#xff1a; 范围不同&#xff1a;单元测试关注于对软件中的最小功能单元进行测试&#xff0c;通常是对独立的函数、方法或类进行测试。而集成测试则更加综合&#xff0c;涉及多个模块、组件或…...

node基础概念

前言&#xff1a;可以让别人访问我们的网页&#xff0c;可以开发服务端应用、工具类应用、桌面端应用&#xff08;electron&#xff09; 1. 计算机基础 概念&#xff1a;CPU 内存 硬盘 主板 显卡 2. 进程和线程 概念&#xff1a;进程是一个程序的执行&#xff0c;线程组合形…...

3步搞定视频转PPT:开源智能提取工具终极指南

3步搞定视频转PPT&#xff1a;开源智能提取工具终极指南 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 你是否厌倦了手动从视频中截图制作PPT&#xff1f;想要快速将录播课程、会议…...

DeepLabV3+语义分割环境配置、DeepLabV3+语义分割模型代跑训练、DeepLabV3+语义分割模型改进创新DeepLabV3+语义分割环境配置:Windows、Ubuntu、Cen

DeepLabV3语义分割环境配置、 DeepLabV3语义分割模型代跑训练、 DeepLabV3语义分割模型改进创新 DeepLabV3语义分割环境配置&#xff1a;Windows、Ubuntu、Centos、Macos等系统环境&#xff0c;如果电脑拥有显卡&#xff0c;可配置GPU版本的DeepLabV3语义分割环境。 DeepLabV3语…...

Linux 驱动开发流程(带最小可运行代码 + 通俗类比)

Linux 驱动开发流程&#xff08;带最小可运行代码 通俗类比&#xff09; 很多人学 Linux 驱动都会卡在这里&#xff1a;API 都看过&#xff0c;但完全不知道它们是怎么串起来工作的这篇文章目标很明确&#xff1a; ✅ 用一条主线讲清流程 ✅ 用类比帮你记住 ✅ 给你一个最小可…...

告别手动测试:用快马AI生成telnet端口批量检测脚本,效率提升十倍

最近在运维工作中频繁遇到需要批量检测服务器telnet端口连通性的需求。手动一台台测试不仅效率低下&#xff0c;还容易出错。经过一番摸索&#xff0c;我总结出一套用Python快速实现批量检测的方案&#xff0c;效率比手工操作提升了十倍不止。这里分享下具体实现思路和优化经验…...

semi-utils:让照片水印处理效率提升15倍的智能批处理方案

semi-utils&#xff1a;让照片水印处理效率提升15倍的智能批处理方案 【免费下载链接】semi-utils 一个批量添加相机机型和拍摄参数的工具&#xff0c;后续「可能」添加其他功能。 项目地址: https://gitcode.com/gh_mirrors/se/semi-utils 在数字影像创作领域&#xff…...

Qwen3.5-2B企业落地案例:制造业设备图片故障诊断辅助系统搭建

Qwen3.5-2B企业落地案例&#xff1a;制造业设备图片故障诊断辅助系统搭建 1. 项目背景与挑战 在制造业生产线上&#xff0c;设备故障诊断一直是影响生产效率的关键环节。传统方式依赖工程师人工巡检&#xff0c;存在以下痛点&#xff1a; 人力成本高&#xff1a;需要专业工程…...

低功耗psram在嵌入式存储领域的作用

在嵌入式存储领域&#xff0c;低功耗PSRAM&#xff08;伪静态随机存取存储器&#xff09;正逐渐成为智能穿戴、物联网设备等对功耗和体积敏感应用的理想选择。那么&#xff0c;PSRAM究竟有什么作用&#xff1f;为什么它能在低功耗场景中脱颖而出&#xff1f; 1.psram是什么 PS…...

ai赋能开发:让快马平台智能助手教你如何用最新jdk特性重构旧代码

今天在维护一个老项目时&#xff0c;发现了一段基于JDK 8的用户过滤排序代码。作为一个持续关注Java新特性的开发者&#xff0c;我决定用最新JDK 17的特性来重构这段代码。正好最近在用InsCode(快马)平台做项目&#xff0c;发现它的AI辅助功能特别适合用来做这种代码现代化改造…...

研究神器组合:Claude Code + NotebookLM + Obsidian

Claude Code NotebookLM Obsidian&#xff1a;研究神器组合导语本文介绍如何用 Claude Code skill 把 NotebookLM 里的内容全部导出到 Obsidian&#xff0c;生成可跳转的知识图谱。核心价值在于&#xff1a;只需三条终端命令&#xff0c;就能把 20 个 YouTube 视频变成带引用…...

02-从零开始编写操作系统 - BIOS 中断与屏幕显示

引导打印 - BIOS 中断与屏幕显示 从零开始编写操作系统 - 第二章 开始之前你可能需要 Google 了解的概念 interrupt, BIOS, ISR, IVT, int 0x10, cpu-registers 目的 使用 BIOS 中断在屏幕上打印字符和字符串 &#x1f31f; 支持一下 如果这个教程对你有帮助&#xff0c;欢…...