
算法
算法
懒虫虫~
无论人生上到哪一层台阶,阶下有人在仰望你,阶上亦有人在俯视你。你抬头自卑,低头自得,唯有平视,才能看见真实的自己!
展开
-
利用队列Queue或栈Stack解决字符数组转换运算题
相同的特殊运算符,从左到右顺序计算。用例保证@,$,左右一定存在数字,且数字不存在前导为0。给定包含特殊运算符号@,$ ,转换规则如下。其中x,y都是非负整数且@优先级高于 $。原创 2024-06-30 18:55:56 · 207 阅读 · 0 评论 -
利用OPT算法解决最短访问次数问题
数据库缓存,模拟访问规则如下:当查询值在缓存中,直接访问缓存,不访问数据库。否则,访问数据库,并将值放入缓存。若缓存已满,则必须删除一个缓存。给定缓存大小和训练数据,依次模拟访问这组数据,请分析在此访问规则下最少的数据库访问次数输入2输出4。原创 2024-06-30 18:24:33 · 347 阅读 · 0 评论 -
利用BFS或动态规划解决路径算法问题
令 f[i][j]表示从左上角到坐标(i,j)的路径数字和最小值,原问题即可被划分为多个求最优值的子问题,且由于每次只能向下或向右移动一步,因此。此题需要求出从左上角出发,到达坐标(m,n)的路径数字和最小值。因此不难想到,子问题就是从左上角出发,到达坐标(i,j)的路径数字和最小值。给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。输入:grid = [[1,3,1],[1,5,1],[4,2,1]]解释:因为路径 1→3→1→1→1 的总和最小。原创 2024-06-30 09:19:14 · 495 阅读 · 0 评论 -
利用BFS解决每个零售店到仓库最短距离之和问题
矩阵中有3种类型:0仓库,-1障碍,1零售店。现在每个零售店要去距离它最近的仓库取货物,请计算出所有零售店到最近仓库距离之和,假设矩阵中每个单元格之间距离为1。如果遇到障碍物,则表示无法通过。可以在单元格上下左右移动。注意无法到达仓库的零售店不参与计算没有零售店或者没有仓库,则返回0。原创 2024-06-25 23:38:35 · 366 阅读 · 0 评论 -
【课程表算法题--拓扑排序】
你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1。在选修某些课程之前需要一些先修课程。例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]。给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]]输出: true解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。示例 2:输入: 2, [[1,0],[0,1]]输出: false。原创 2024-06-22 07:48:17 · 313 阅读 · 0 评论 -
利用单调栈思路解决递增关系数据问题
在对数据进行排序的过程中,通常采用取1个数作为主元,通过比较交换,把比主元小的数挪到它左边;把比主元大的元素挪到右边。现给定一个划分后的正整数序列,请问有多少个元素可能是排序过程中选中的主元?并按顺序输出这些值。通过暴力解法,分别比较每个数的左边和右边值,如果当前值大于左边值且当前值小于右边值,则保存此值到列表中,最后对列表排序输出。由于满足主元的条件:其右边值一定大于它,其左边值一定小于它,相当于有一个隐藏的递增关系,可以考虑单调栈,此解法更加高效。原创 2024-06-08 16:47:51 · 259 阅读 · 0 评论 -
记录本周五项目上线失败经验总结
从此次上线失败事件中,发现我们存在一个误区就是只要上线失败,就肯定是我们自己代码问题(虽然有时候确实这样)。但是既然经过了sit和uat两个环境的测试和检验,代码逻辑应该没啥问题!惯性思维有时候害死人!如果我们先分析接口调用链路情况,可能就不会再费力的去分析错误日志和代码逻辑了!有时候遇到问题,需要换种思路去分析,而不是盲目的自我怀疑。还有就是生产环境出问题,不要慌张,要冷静的分析查找根本原因,如果自己都乱了阵脚,那么很容易陷入思维误区或者事倍功半。原创 2023-07-30 00:06:17 · 477 阅读 · 0 评论 -
双重for循环优化
通过迭代删除或者利用map集合特性均能够有效提升查询效率原创 2023-07-28 22:51:00 · 5894 阅读 · 0 评论 -
整数数组的奇数位于数组的前半部分,偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。类似于冒泡排序,从头开始,相邻元素只要是前偶后奇就交换,不同的是内循环每次都从头开始,防止一开始就有许多连续的偶数情况。开辟一个与原数组一样大的vector,从头遍历一遍将奇数放在前面,然后再遍历一遍,将偶数接着放在后面。原创 2023-07-16 19:35:16 · 394 阅读 · 0 评论 -
给你二叉树的根节点 root ,返回它节点值的中序遍历
题目:给你二叉树的根节点 root ,返回它节点值的中序遍历。这里考察中序遍历思想,使用Stack的后进先出特性输出结果。构造后的图形化展示结果,注意程序不会输出左右斜杠哦~buildTree构造树形结构数据。TreeNode树状结构。原创 2023-07-16 18:31:10 · 315 阅读 · 0 评论 -
异常执行结果随笔
前段时间有朋友问我异常执行顺序问题,这里简单记录下哈。伪代码描述,当j=0和j=1,输出结果分别是什么?当j=0时候,输出结果为。当j=1时候,输出结果为。原创 2023-07-16 09:04:51 · 228 阅读 · 0 评论 -
【用最少数量的箭引爆气球】
(1)当前气球Xstart原创 2023-06-26 21:54:19 · 386 阅读 · 0 评论 -
【数组中的第K个最大元素】
请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。原创 2023-06-24 13:48:40 · 118 阅读 · 0 评论 -
组合 - Java - 回溯 + 剪枝
给定两个整数n和k,返回1…n中所有可能的k个数的组合。示例输入输出[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]原创 2022-07-28 23:38:10 · 1019 阅读 · 0 评论 -
349两个数组的交集和01两数之和
给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例给定nums=[2,7,11,15],target=9因为nums[0]+nums[1]=2+7=9所以返回[0,1]分析题意就是让你从数组中找到两个位置他们对应位置的和为target。...原创 2022-07-23 23:00:15 · 162 阅读 · 0 评论 -
49字母异位分组和242有效的字母异位词
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例输入输出[[“bat”]]说明所有输入均为小写字母。不考虑答案输出的顺序。原创 2022-07-23 22:55:27 · 262 阅读 · 0 评论 -
Java中List集合去除重复数据的5种方法
List集合去除重复1.循环list中的所有元素然后删除重复2.通过HashSet踢除重复元素3.删除ArrayList中重复元素,保持顺序4.把list里的对象遍历一遍,用list.contains(),如果不存在就放入到另外一个list集合中5.retainAll和retainAll用法6.用JDK1.8 Stream中对List进行去重:list.stream().distinct()1.循环list中的所有元素然后删除重复public static List removeDuplica转载 2021-10-27 18:45:00 · 6084 阅读 · 0 评论 -
两个或多个有序数组合并为一个有序数组
要求:不使用for循环不使用API方法进行数据迁移 :System.arraycopy(int[] a,…);Arrays.copyOf(int[] a,…);一、两个有序数组合并为一个有序数组方案1import java.util.Arrays;public class ArraySortTest { public static void main(String[] args) { //方法1,普通for循环+工具类Arrays.sort(arraySort)原创 2021-10-19 17:46:47 · 8901 阅读 · 1 评论 -
Java实现质因数分解
package com.algorithm;public class Factor { public static void main(String[] args) { factor(88); } public static void factor(int num) { for(int i=2;i<=Math.sqrt(num);i++) { if(num%i == 0) { .原创 2021-06-08 10:42:17 · 885 阅读 · 2 评论 -
AESUtil加密、解密工具类介绍
package com.example;import java.io.UnsupportedEncodingException;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;import javax.crypto.BadPaddingException;import javax.crypto.Ciphe转载 2020-06-04 09:32:17 · 3113 阅读 · 0 评论 -
HashMap拉链法简介
拉链法用途解决hash冲突(即put操作时计算key值问题)。拉链法原理把具有相同散列地址的关键字(同义词)值放在同一个单链表中,称为同义词链表。有m个散列地址就有m个链表,同时用指针数组A[0,1,2…m-1]存放各个链表的头指针,凡是散列地址为i的记录都以结点方式插入到以A[i]为指针的单链表中。A中各分量的初值为空指针。拉链法原理解释HashMap是一个数组,数组中的每个元素是链表。put元素进去的时候,会通过计算key的hash值来获取到一个index,根据index找到数组中的位置,进原创 2020-05-20 10:28:49 · 7224 阅读 · 0 评论 -
手写SHA1加密算法(Java版)
开发微信公众号过程中,需要使用sha1加密算法与微信api对接,特此学习下sha1算法的实现。1:安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。2:1byte等于二进制8位,则分成高四位和第四位进行加密解析。由于15在二进制中表示为"00001111",则和15低四位与(&)运算,运算规则:0&0=0原创 2020-05-20 10:26:59 · 4221 阅读 · 0 评论