day57-day58【代码随想录】二刷数组
文章目录
- 前言
- 一、螺旋矩阵||(力扣59)
- 二、螺旋矩阵(力扣54)
- 三、顺时针打印矩阵(剑指 Offer29)
- 四、在排序数组中查找元素的第一个和最后一个位置(力扣34)【二分查找】
- 五、有多少小于当前数字的数字(力扣1365)
- 六、有效的山脉数组(力扣941)【双指针】
- 七、平均等待时间(力扣1701)
- 八、独一无二的出现次数(力扣1207)
- 每日一题:二进制数转字符串(力扣05.02)
- 每日一题:保证文件名唯一(力扣1487)
前言
1、螺旋矩阵||
2、螺旋矩阵
3、顺时针打印矩阵
4、在排序数组中查找元素的第一个和最后一个位置
5、有多少小于当前数字的数字
6、有效的山脉数组
7、平均等待时间
8、独一无二的出现次数
一、螺旋矩阵||(力扣59)
给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

注意:循环次数,以及只有一个字符时的情况,或者转完一圈后,剩一个字符的情况。绕啊绕
class Solution {public int[][] generateMatrix(int n) {int loop = 0;//循环次数int[][] res = new int[n][n];int count =1; int start =0;int i,j;while(loop++<n/2){ for(j=start;j<n-loop;j++){res[start][j] = count++;}for(i=start;i<n-loop;i++){res[i][j] = count++;}for(;j>=loop;j--){res[i][j] = count++;}for(;i>=loop;i--){res[i][j] = count++;}start++;}if(n%2==1){ //既包括了一个字符的情况 也包括了转完一圈后剩一个字符的情况res[start][start]=count;}return res;}
}
方法二:
该方法可以作为一个模板
class Solution {public int[][] generateMatrix(int n) {int[][] res = new int[n][n];int left = 0;int right = n-1;int top = 0;int bottom = n-1;int count = 1;res[0][0] =1;while(true){for(int i=left;i<=right;i++){res[top][i] = count++;}if(++top>bottom) break;for(int j=top;j<=bottom; j++){res[j][right] = count++;}if(--right<left) break;for(int i=right;i>=left;i--){res[bottom][i] = count++;}if(--bottom<top) break;for(int j=bottom;j>=top;j--){res[j][left] = count++;}if(++left>right) break;}return res;}
}
二、螺旋矩阵(力扣54)
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> res = new ArrayList<Integer>();int left = 0;int right = matrix[0].length-1;int top = 0;int bottom = matrix.length-1;while(true){for(int i=left;i<=right;i++){res.add(matrix[top][i]);}if(++top>bottom) break;for(int j=top;j<=bottom;j++){res.add(matrix[j][right]);}if(--right<left) break;for(int i=right;i>=left;i--){res.add(matrix[bottom][i]);}if(--bottom<top) break;for(int j=bottom;j>=top;j--){res.add(matrix[j][left]);}if(++left>right) break;}return res;}
}
三、顺时针打印矩阵(剑指 Offer29)
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
与上一题的区别,这道题可以从0开始,也就是一开始的matrix={}
此时如果
int bottom = matrix.length-1;
int right = matrix[0].length-1;
放在开头就会报错

因此需要加一行:
if(matrix.length==0 ||matrix[0].length==0){return new int[0];}
class Solution {public int[] spiralOrder(int[][] matrix) {int top =0;int left = 0;if(matrix.length==0 ||matrix[0].length==0){return new int[0];}int bottom = matrix.length-1;int right = matrix[0].length-1;int[] res = new int[(bottom+1)*(right+1)];int k = 0;res[0]=1;while(true){for(int i=left;i<=right;i++){res[k++] = matrix[top][i];}if(++top>bottom) break;for(int j=top;j<=bottom;j++){res[k++] = matrix[j][right];}if(--right<left) break;for(int i=right;i>=left;i--){res[k++] = matrix[bottom][i];}if(--bottom<top) break;for(int j=bottom;j>=top;j--){res[k++] = matrix[j][left];}if(++left>right) break;}return res;}
}
四、在排序数组中查找元素的第一个和最后一个位置(力扣34)【二分查找】
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。

class Solution {public int[] searchRange(int[] nums, int target) {int leftBorder = getLeftBoreder(nums,target);int rightBorder = getRightBoreder(nums,target);if(rightBorder==-2 || leftBorder==-2){return new int[]{-1,-1};}if(rightBorder-leftBorder>1){return new int[]{leftBorder+1,rightBorder-1};}else return new int[]{-1,-1};}public int getLeftBoreder(int[] nums, int target){int left = 0;int right = nums.length-1;int mid;int leftBorder=-2;while(left<=right){mid = (left+right)/2;if(nums[mid]>=target){right=mid-1;leftBorder = right;}else{left = mid +1;}}return leftBorder;}public int getRightBoreder(int[] nums, int target){int left = 0;int right = nums.length-1;int mid;int rightBorder=-2;while(left<=right){mid = (left+right)/2;if(nums[mid]<=target){left=mid+1;rightBorder = left;}else{right = mid -1;}}return rightBorder;}
}
五、有多少小于当前数字的数字(力扣1365)
给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。
换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。
以数组形式返回答案。

找个桶,这个桶用来存放每个数字出现的次数,然后依次遍历这个桶,处理桶中的数据
比如 在案例中
bucket[1] =1
bucket[2] =2
bucket[3] =1
bucket[8] =1
遍历桶的时候 :
int count =0;for(int i=0;i<barcket.length;i++){int temp = barcket[i];barcket[i] = count;count +=temp;}
最后只取桶中我们需要的数据
class Solution {public int[] smallerNumbersThanCurrent(int[] nums) {//桶 存放数字n出现的次数int[] barcket = new int[101];for(int i:nums){barcket[i]++;}int[] res = new int[nums.length];int count =0;//处理桶for(int i=0;i<barcket.length;i++){int temp = barcket[i];barcket[i] = count;count +=temp;}int k=0;for(int i:nums){res[k++] = barcket[i];}return res;}
}
六、有效的山脉数组(力扣941)【双指针】
给定一个整数数组 arr,如果它是有效的山脉数组就返回 true,否则返回 false。
如果 arr 满足下述条件,那么它是一个山脉数组:
arr.length >= 3
在 0 < i < arr.length - 1 条件下,存在 i 使得:
arr[0] < arr[1] < … arr[i-1] < arr[i]
arr[i] > arr[i+1] > … > arr[arr.length - 1]

注意这个测试用例:

先上山, i=1;i<arr.length && arr[i]>arr[i-1];i++
如果 退出这个循环后 i依然等于1 或者i等于 arr.length时 说明上山上不动或者一次爬到终点两种情况 均return false
此时i指向最高点的下一位
再下山,;i<arr.length && arr[i-1]>arr[i];i++
如果退出循环后 i可以等于arr.length 说明下山成功 可以下到山脚
如果;i<arr.length && arr[i]>arr[i+1];i++ 退出循环后 i如果等于arr.length-1 这样子
就会出现测试用例的情况
class Solution {public boolean validMountainArray(int[] arr) {int i ;for(i=1;i<arr.length && arr[i-1]<arr[i];i++);//上山爬不动或者一次爬到终点if(i==1 || i==arr.length) return false;for(;i<arr.length-1 && arr[i]>arr[i+1];i++);return i==arr.length-1;}
}
七、平均等待时间(力扣1701)
有一个餐厅,只有一位厨师。你有一个顾客数组 customers ,其中 customers[i] = [arrivali, timei] :
arrivali 是第 i 位顾客到达的时间,到达时间按 非递减 顺序排列。
timei 是给第 i 位顾客做菜需要的时间。
当一位顾客到达时,他将他的订单给厨师,厨师一旦空闲的时候就开始做这位顾客的菜。每位顾客会一直等待到厨师完成他的订单。厨师同时只能做一个人的订单。厨师会严格按照 订单给他的顺序 做菜

类似于先来先服务调度算法 ,先计算到达时间, 开始时间不一定等于到达时间,可能上一位顾客结束比较晚,那么开始时间就应该等到上一位顾客结束之后 start 和arrival应该取较大值,然后等待时间累加即可
class Solution {public double averageWaitingTime(int[][] customers) {int start=0;double wait =0;for(int[] customer:customers){int arrivali = customer[0];start =Math.max(start,arrivali); //一定要取最大值 [5,2],[5,4]start +=customer[1]; //结束时间wait += start-arrivali; //等待时间总和}return wait/customers.length;}
}
八、独一无二的出现次数(力扣1207)
给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。
如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。

class Solution {public boolean uniqueOccurrences(int[] arr) {HashMap<Integer,Integer> map = new HashMap<>();for(int i:arr){map.put(i,map.getOrDefault(i,0)+1);} //遍历数组 看数组有没有重复的值//统计不同的出现次数的数目。如果不同的出现次数的数目等于不同数字的数目Set<Integer> times = new HashSet<Integer>();for(Map.Entry<Integer,Integer> x:map.entrySet()){times.add(x.getValue());}return times.size() == map.size(); }
}
每日一题:二进制数转字符串(力扣05.02)
二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。
class Solution {public String printBin(double num) {StringBuilder ans = new StringBuilder();ans.append("0.");while(num>0 && ans.length()<=32){num = num*2.0;if(num>=1){ans.append("1");num=num-1;}else{ans.append("0");}}return ans.length() <= 32 ? ans.toString() : "ERROR";}
}
每日一题:保证文件名唯一(力扣1487)
给你一个长度为 n 的字符串数组 names 。你将会在文件系统中创建 n 个文件夹:在第 i 分钟,新建名为 names[i] 的文件夹。
由于两个文件 不能 共享相同的文件名,因此如果新建文件夹使用的文件名已经被占用,系统会以 (k) 的形式为新文件夹的文件名添加后缀,其中 k 是能保证文件名唯一的 最小正整数 。
返回长度为 n 的字符串数组,其中 ans[i] 是创建第 i 个文件夹时系统分配给该文件夹的实际名称。

创建一个哈希表,遍历names数组,拿到name之后去哈希表中看看有没有出现过,如果没有 names数组不需要做任何操作,哈希表需要记录一下 此name出现的次数为1。如果出现过,首先先获取一下出现了多少次,假设gta出现了1次,注意:不能直接在出现次数上+1=2 gta(2),而需要看看names中有没有这个次数 如果有 则次数需要继续++,并且需要修改map中该元素出现的次数。
class Solution {public String[] getFolderNames(String[] names) {Map<String,Integer> d = new HashMap<>();for(int i=0;i<names.length;i++){if(d.containsKey(names[i])){int k = d.get(names[i]);//获取出现的次数while(d.containsKey(names[i] + "(" +k+")")){k++;}//更新值d.put(names[i],k);names[i] += "(" +k+ ")"; }d.put(names[i],1); }return names;}
}
相关文章:
day57-day58【代码随想录】二刷数组
文章目录前言一、螺旋矩阵||(力扣59)二、螺旋矩阵(力扣54)三、顺时针打印矩阵(剑指 Offer29)四、在排序数组中查找元素的第一个和最后一个位置(力扣34)【二分查找】五、有多少小于当…...
【NLP】自动化计算文本文件TTR的bash脚本
自动化计算文本文件TTR的bash脚本 简介 这是一个可以计算文本文件TTR的bash脚本,文件名为:calculate_TTR.sh。它会接收一个文件名作为参数,并输出总单词数、特异单词数和TTR。 TTR是什么 TTR(Type-Token Ratio)是用…...
蓝桥杯单片机组省赛十二届第一场(关于矩阵,温度ds18b20,时间ds1302的学习,以及继电器等外设的综合利用)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、该题目如下二、使用步骤1.矩阵键盘实现2.温度传感器ds18b20的实现总结提示:以下是本篇文章正文内容,下面案例可供参考 一、该题目如下 分…...
Ubuntu 新人上手 Microk8s 指南
文章目录1. 什么是 Ubuntu 核心2. 什么是 Kubernetes3. 什么是MicroK8s4. 为什么选择 Microk8s on Core5. 安装Ubuntu Core6. Ubuntu Core上安装 MicroK8S7. 启动 Microk8s8. 启用必要的 MicroK8s 插件9. 部署示例容器工作负载10. 检查部署状态并访问您的应用程序11. 管理镜像1…...
初阶C语言——实用调试技巧【详解】
文章目录1. 什么是bug?2. 调试是什么?有多重要?2.1 调试是什么?2.2 调试的基本步骤2.3 Debug和Release的介绍3.学会使用快捷键4.调试的时候查看程序当前信息4.1 查看临时变量的值4.2 查看内存信息4.3 查看调用堆栈4.4 查看汇编信息…...
Android 绘图基础:Canvas画布——自定义View基础(绘制表盘、矩形、圆形、弧、渐变)
Canvas画布,通过它我们可以自定义一个View,设置View的相关效果之类的。感觉用法差不多,重要的是要理解方法中传入的参数的含义,比如float类型的参数,传递的是坐标,已开是没有注意传入的参数时坐标,导致我迷…...
js拷贝数组对象:浅拷贝深拷贝
前言 js拷贝数组对象:浅拷贝&深拷贝,包括:Object.assign、concat、slice、JSON.parse(JSON.stringify()) 场景:弹窗选择组织结构(树形结构),选择后显示相关数据至输入框中(每次选…...
【C++】string类的使用
目录 一、标准库中的string类 二、string类的常用接口 1、string类对象的常见构造 2、string类对象的容量操作 2.1、size 与 length 2.2、capacity 与 reserve 2.3、resize 2.4、总结 3、string类对象的访问及遍历操作 3.1、operator[] 与 at 3.2、begin end 3.3、…...
微服务架构简介
微服务 软件架构是一个包含各种组织的系统组织,这些组件包括 Web服务器, 应用服务器, 数据库,存储, 通讯层), 它们彼此或和环境存在关系。系统架构的目标是解决利益相关者的关注点。 image Conway’s law: Organizations which design systems[...] are constrained…...
【Spring源码】AOP的开端:核心对象创建的准备工作
AOP的核心成员是如何被被加载的?本篇我们主要分析使用xml的逻辑,如果使用注解,增加注解处理类即可(ConfigurationClassPostProcessor)拿之前分析循环的时候举的例子🌰,它的日志切面就是通过xml进…...
新号涨粉22w,搞笑博主再次爆火,小红书近期创作趋势是什么?
2月借势元宵、情人节,小红书平台又涌现出哪些黑马博主?品牌在投放种草方面有何亮眼表现?为洞察小红书平台的内容创作趋势及品牌营销策略,新红推出2月月度榜单,从创作者及品牌两方面入手,解析月榜数据&#…...
【C++】30h速成C++从入门到精通(内存管理、函数/类模板)
C内存分布我们先来看一下下面的一段代码相关问题int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] {1, 2, 3, 4};char char2[] "abcd";char* pChar3 "abcd";int* ptr1 (int*)mal…...
自动驾驶决策概况
文章目录1. 第一章行为决策在自动驾驶系统架构中的位置2. 行为决策算法的种类2.1 基于规则的决策算法2.1.1 决策树2.1.2 有限状态机(FSM)2.1.3 基于本体论(Ontologies-based)2.2 基于统计的决策算法2.2.1 贝叶斯网络(B…...
金山轻维表项目进展自动通知
项目经理作为项目全局把控者,经常要和时间“赛跑”。需要实时了解到目前进展如何,跟进人是那些?哪些事项还未完成?项目整体会不会逾期?特别是在一些大型公司中,优秀的项目经理已经学会使用金山轻维表做项目…...
基于上下文分析的 Python 实时 API 推荐
原文来自微信公众号“编程语言Lab”:基于上下文分析的 Python 实时 API 推荐 搜索关注 “编程语言Lab”公众号(HW-PLLab)获取更多技术内容! 欢迎加入 编程语言社区 SIG-程序分析 参与交流讨论(加入方式:添加…...
软件测试-接口测试-代码实现接口测试
文章目录 1.request1.1 request介绍1.2 发送get请求1.3 发送set请求1.4 其他请求方式1.5 传递url参数1.6 响应内容解析1.7 cookie1.8 设置session2.集成UnitTest2.1 接口测试框架开发2.2 案例:使用TPShop项目完成对登录功能的接口测试1.request 1.1 request介绍 概念 基于py…...
中村成洋《垃圾回收的算法与实现》PDF 读书笔记
观前提醒 为了能够锻炼自己,我会查阅大量外文不停的修改内容,少部分会提示成中文。 可能有误,请见谅 提示:若是觉得阅读困难,可以看如下内容 脚本之家可获取,若失效可私信浏览器的沙拉查词扩展…...
docker 网络模式
docker 网络模式主要分为四种,可以通过docker network ls 查看 ~$ docker network ls NETWORK ID NAME DRIVER SCOPE a51d97d72f10 bridge br…...
数据库开发(一文概括mysql基本知识)
Mysql 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 关系型数据库(Relational Database Management System:关系数据库管理系统)应用软件之一。mysql在问开发中,几乎必不可少,因为其他的可能是要收费的&#x…...
【JVM】详解Java内存区域和分配
这里写目录标题一、前言二、运行时数据分区2.1程序计数器(PC)2.2 Java虚拟机栈2.3 本地方法栈2.4 Java堆2.5 方法区2.5.1 运行时常量池2.6 直接内存三、HotSpot虚拟机对象探秘3.1 对象的创建3.2 对象的内存布局3.3 对象的访问定位一、前言 C/C需要自行回收和释放已经没用的对象…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
