
LeetCode每日一题
-----沉心静气,厚积薄发-----
Sedatem
沉心静气,不论起伏。
展开
-
求众数 II
题目解题思路假定num1,num2为出现次数大于nums.length/3的两个数。(最多出现两个)遍历 nums, 若出现 num1、num2 中任意一数,计数+1,若都不等,则计数-1.若 num1、num2 有一个计数 < 0,则替换成当前遍历数(更换新的众数)数组可能出现 无众数 或只有 一众数 情况,所以需要再次遍历数组,统计所选众数出现次数,将满足条件(出现次数大于 nums.length / 3 )的数加入返回集合。Codeclass Solution { pu原创 2022-02-18 10:45:58 · 413 阅读 · 0 评论 -
只出现一次的数字
题目解题思路先对原数组之中的元素进行排序,这样可以将大小相等的所有数字认为组合成一个一个的“块”。由于题中说明只会有 1 个出现一次的数字,从而只要 nums[i] != nums[i - 1] 并且 nums[i] != nums[i + 1] 即可为了防止数组越界,将数组的首尾进行特殊判断。对于数组中仅有一个数字的情况,只需要 res = nums[0] 即可满足题意Codeclass Solution { public int singleNumber(int[] nums原创 2022-02-18 10:38:08 · 242 阅读 · 0 评论 -
LeetCode-最简分数
题目解题思路思路一:通过双层循环,计算配套的分子分母是否有公约数,如果有公约数,则不添加到结果列表。思路二:同样是双层循环,分子分母按从小到大遍历,可知任何一个可约分的分数,它的实际值一定是在前面遍历过程中就出现过了。按照思路二,我们就可以创建Set记录下所有的不同值,并且只需要判断后面出现的分数值是否已经出现在集合内。Codeclass Solution { public List<String> simplifiedFractions(int n) {原创 2022-02-16 16:28:53 · 487 阅读 · 0 评论 -
员工的重要性
题目解题思路(广度优先搜索)首先找到要计算重要性员工 的id,id 进辅助队列并记录其重要性,然后该员工下属的 id 进队列,该员工的 id 出队列,之后再找到下属的 id 并记录重要性,重复上述步棸,直至无下属。Codeclass Solution { public int getImportance(List<Employee> employees, int id) { int sum = 0; // 存储所求员工重要性变量 Lin原创 2022-02-15 15:39:40 · 293 阅读 · 0 评论 -
有序数组中的单一元素
题目解题思路由于只有一个数只出现一次,其他数均出现两次,而且数组是有序的。因此在只出现一次的数之前,偶数位的数一定与后面相邻的奇数位的数相同。在该数之后,奇数位的数与后面相邻的偶数位的数相同(例如数组[1,1,2,3,3,4,4,8,8]中,序号2之前,nums[0] == nums[1],序号2之后,nums[3] == nums[4]等等)因此判断条件就是偶数位与后面相邻的奇数位是否相同,若相同,则表明要求的答案在当前结果的后面,否则,表明答案不在当前结果后面。给定一个序号原创 2022-02-14 22:55:32 · 525 阅读 · 0 评论 -
逆波兰表达式求值
题目解题思路运算规则为:运算符在式中出现的顺序恰为表达式的运算顺序;每个运算符和在它之前出现且紧靠它的两个操作数构成一个最小表达式。逆波兰表达式的输入最后加一个 # 表示输入的结束。建立一个存放 double 型数字的栈。用一个数组存放需要输入的操作数的每个字符(包括小数点),操作符和运算符之间用空格隔开。Codeclass Solution { public int evalRPN(String[] tokens) { Stack<Integer>原创 2022-02-11 21:10:13 · 297 阅读 · 0 评论 -
论文H指数
题目解题思路将数组按升序排序后,遍历数组后取当前值与剩余数组数量的较小值,即为H值Codeclass Solution { public int hIndex(int[] citations) { //特殊情况 if(citations==null || citations.length==0) return 0; //升序排列 Arrays.sort(citations); int h = 0;原创 2022-02-10 23:13:07 · 724 阅读 · 0 评论 -
和为K的最少斐波那契数字数目
题目解题思路观察题目,就可知道,想要确定最少数量,只需要依次取小于k的最大数字,直到匹配结果,得到所用的斐波契数字数字,这跟贪心算法是一个思路首先,创建一个动态大小的数组,来尽可能最小占用空间的调用内存。只需要储存到小于k的最大斐波契数字然后再创建循环通过贪心算法的思路,解出来答案Codeclass Solution { public int findMinFibonacciNumbers(int k) { if (k == 1 || k == 2) {原创 2022-02-09 21:51:04 · 821 阅读 · 0 评论 -
分组得分最高的所有下标
题目解题思路根据nums的下标分组,分成numsleft和numsright,其中numsleft的得分为区间内0的个数,而numsright的得分为区间内1的个数,而且nums[i]不是0就是1,所以可以先求出nuns[i]的前n项和。然后创建一个score数组,则score[i]是以i为下标进行分组的得分。可知numsright为1的个数,其实就是该区间内的和,因为nums[i]不是0就是1,比如[0,1,1]这个区间和为2,那么1的个数就是2。Codeclass Solution {原创 2022-02-08 20:07:38 · 471 阅读 · 0 评论 -
子域名访问计数
题目解题思路使用substring来分割字符串;使用entry来遍历map;在循环里用+连接字符串.Code class Solution { private Map<String, Integer> visitMap = new HashMap<>(); //使用Map的键值对来计数很方便 public List<String> subdomainVisits(String[] cpdomains)原创 2022-01-28 20:11:25 · 319 阅读 · 0 评论 -
第n个数字
题目解题思路1位数:1~9,共9个,占了19=9位;2位数:10~99,共90个,占了290=180位;3位数:100~999,共900个,占了3*900=2700位;……m位数:共9*100(m-1)个,占了m*9*100(m-1)位。具体步骤:确定n所在数字的位数,记为 digit;确定n所在的数字,记为 num;确定n是num中的哪一数位,并返回结果。Codeclass Solution { public int findNthDigit(in原创 2022-01-27 10:07:45 · 346 阅读 · 0 评论 -
按符号重排数组
题目解题思路思路很简单,只需要将数组的数字判断正负号后,依次按照一正一负的顺序填入到重组数组里Codeclass Solution { public int[] rearrangeArray(int[] nums) { //创建一个新数组,用于承装重排后的数组 int[] ans = new int[nums.length]; int idx1 = 0; int idx2 = 1; //创建两个指针,分别原创 2022-01-26 20:56:23 · 323 阅读 · 0 评论 -
统计隐藏数组数目
题目解题思路首先我们知道的是:这道题是让我们求数目,而不是求出来具体的数组所以说我们并不需要计算每一个数组是多少,只需要知道数组的上下限是多少从0执行一次传入数组differences[],从而储存min和max,求出数组的上下限然后判断是否满足在上下限之间即可Codeclass Solution { public int numberOfArrays(int[] differences, int lower, int upper) { long min = 0,原创 2022-01-25 16:42:55 · 181 阅读 · 0 评论 -
在线选举--java
题目解题思路把每一个投票以后的时刻的leader都算出来,然后供二分查询使用题目中所说的,平票时,最后一个出现的人为胜者思路是从0开始,每出一个时间判断是否有新的leader,利用好每次投票都只投一个人,所以俩数组大小相同Codeclass TopVotedCandidate{ int[] candidate;// 记录每位候选人的票数 int[] leaders;// 记录每次投票后的leader; int[] times; public TopVotedCandidat原创 2022-01-24 22:47:37 · 182 阅读 · 0 评论 -
最大数-java
题目解题思路对于两个数字a和b来说,如果将其都转为字符串,如果 ab > ba,则a排在前面。比如9和34,由于 934>349,所以9排在前面,再比如说 30 和3,由于 303<330,所以3排在 30 的前面。按照这种规则对原数组进行排序后,将每个数字转化为字符串再连接起来就是最终结果。Codeclass Solution { public String largestNumber(int[] nums) { int n=nums.len原创 2022-01-21 20:39:33 · 443 阅读 · 0 评论 -
找到需要补充粉笔的学生编号
题目解题思路先计算出次遍历所消耗的粉笔数,然后取余这样操作后,再次遍历即可得到结果Codeclass Solution { public int chalkReplacer(int[] chalk, int k) { // n个学生,编号0-n - 1 // 回答顺序 0 - n -1 // 共k支粉笔,消耗chalk[i],当剩余量小于时,补充粉笔,返回需要补充的编号 int n = chalk.length;原创 2022-01-20 21:47:16 · 276 阅读 · 0 评论 -
数组的子集
题目解题思路给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。思路 [1,2,3]对于长度为1的数组 其所有子集为 [] [1]对于长度为2的数组 其所有子集为[] [2] [1] [1,2]对于长度为3的数组 其所有子集为[][3] [2] [2,3] [1] [1,3] [1,2] [1,2,3]从以上规律可以总结出来对于长度为1的数组 其所有子集为 [] [num[0]]对于长度为2的数组 其所有子集为 长度为1的所有子集 + 长度为1的所有子集每个子集原创 2022-01-19 22:43:22 · 560 阅读 · 0 评论 -
求众数II
题目解题思路排序。外循环标记当前要统计次数的数字,内循环向后遍历统计次数。首先从第0个数字开始,内循环向后遍历,遇到相同的数字计数+1,直到找到第一个不同的数字退出内循环。统计出现次数是否满足众数的要求。内循环指针为j,此时j指向的是下一个数字的起始位Codeclass Solution { public List<Integer> majorityElement(int[] nums) { int majorityCount = nums.leng原创 2022-01-18 21:24:37 · 327 阅读 · 0 评论 -
数字转换为十六进制数
题目解题思路将原num通过每次右移4位,然后与运算1111,也就是15,这样就能得到每4位的值;然后找到对应Hex字符放到StringBuider();最后记得反转,以及去"0";Codeclass Solution { char[] hexArr = "0123456789abcdef".toCharArray(); public String toHex(int num) { StringBuilder sb = new StringBuilder(""原创 2022-01-17 21:48:53 · 3507 阅读 · 0 评论 -
第三大的数
题目解题思路通过for循环依次找到对应的第一大的数和第二大的数以及第三大的数对于其他情况如有等于的值,或者比第三大的数更小的值,都直接进入下个循环遍历所有即可Codeclass Solution { public int thirdMax(int[] nums) { //始终记录最大的三个数,[1,2,-2147483648],所以要用long long a = Long.MIN_VALUE;//最大 long b = Long.MI原创 2022-01-14 22:21:18 · 213 阅读 · 0 评论 -
至少是其他数字两倍的最大数
题目思路只需要比较比较最大数和第二大数,如果最大数要大于第二大数的两倍,则一定是大于其他数字两倍的最大值,反之,如果不成立,则不完全成立,返回-1即可。Codeclass Solution { public int dominantIndex(int[] nums) { if(nums.length==1) return 0; int index=-1; int max=Integer.MIN_VALUE; int second=Inte原创 2022-01-13 22:00:06 · 123 阅读 · 0 评论 -
递增的三元子序列
题目解题思路首先排除数组长度小于3的情况然后再 找出两个最小数 然后找一个比这个两个数的大的即可Codeclass Solution { public boolean increasingTriplet(int[] nums) { //bad-case if (nums.length < 2) { return false; } //先判断数组长度是否满足至少大于等于三,即三元的基本条件原创 2022-01-12 22:04:15 · 349 阅读 · 0 评论 -
全排列-递归思路
题目解题思路1.固定开始元素,剩下的元素进行全排列2.继续固定下一位元素,剩下的元素进行全排列3.递归终点为最后一个元素4.交换下一个元素,重复执行第一步,直到所有元素替换完成Codeclass Solution { //保存所有结果的集合 private List<List<Integer>> listNums = new ArrayList<>(); public List<List<Integer>&原创 2022-01-11 23:23:24 · 638 阅读 · 0 评论 -
尽可能使字符串相等
题目思路(滑动窗口)这道题需要将每个字符的开销用字符串等长的数组存储起来,并按滑动窗口的思想,得到可转化的最大长度滑动窗口核心思想:用两个指针start和end表示数组diff的子数组的开始下标和结束下标约束条件是:要满足子数组的元素和不超过maxCost。可以知道的是子数组的长度是:end-start+1.移动指针的原则:固定其中一个指针(如start指针),并逐步缩小移动指针的下标(即向左移动),直达刚满足条件,再移动一位固定指针,重复操作或者固定其中一个指针(如end指原创 2022-01-10 23:27:56 · 341 阅读 · 0 评论 -
猜数字游戏
题目解题思路这道题的思路就是:找公牛数和找奶牛数公牛数:判断两组字符串的相应位置字符是否相同,相同则公牛数加一。母牛数:分别统计除取公牛数后,每个数字在各自字符串中出现的次数,取两个字符串中共同出现的次数较小的作为这个数的母牛数,然后所有数的母牛数相加,则为总母牛数。这道题的一个关键也在于题中一句话:有多少位非公牛数通过重新排列组合能够变成公牛数 ,为求出奶牛数提供了思路。java语法知识以StringBuilder作为一种可变数据类型,创建链表。append()方原创 2022-01-07 20:50:22 · 1968 阅读 · 0 评论 -
Z字形变换
题目解题思路这道题的思路关键是: 使用StringBuilder类型因为 StringBuilder是一个可修改的字符串对象,StringBuilder类型的字符串可以增长或剪切。所以在进行解题时,只需要判断字符应该放在哪一行(哪一个StringBuilder)中,就把这个字符加到对应的StringBuilder中即可,也不需要说明放在StringBuilder的哪个位置 只需要append就行StringBuilder.append()。所以这道题的关注力只需要集中在哪原创 2022-01-06 22:13:04 · 545 阅读 · 0 评论 -
向字符串添加空格
题目解题思路这道题的思路主要是:切片分段 到 每段后添加空格,最后进行 拼接的过程。java语法知识StringBuffer的实例化对象的创建。append()方法、substring()方法、toString()方法的使用。substring(beginIndex,endIndex)方法是:返回字符串的子字符串(起始索引位置到终止索引位置)关键代码解释 sb.append(s.substring(start,spaces[i])).append(" ");这行代码主要实现了原创 2022-01-05 22:21:06 · 8623 阅读 · 0 评论 -
Excel表列名称
题目解题思路首先,可以先去写一下这道题的伴生题,Excel表的列序号。即给你列名称来求列序号。题的本质可以看做是26进制数与10进制数之间的转化,在算法的设计语句和计算上,亦是如此。理解了Excel表的列序号是26进制数转化成10进制数,就知道了Excel的列名称就是10进制数转化成26进制数。在计算方法上与2进制与10进制数的转化没有区别。java语法知识StringBuffer的实例化对象的创建。append()方法、reverse()方法、toString()方法的使用。关键代原创 2022-01-04 16:12:14 · 1165 阅读 · 0 评论 -
错误的集合
错误的集合—题目解题思路(哈希表法)重复的数字在数组中出现两次,丢失的数字在数组中出现0次。其余的每个数字在数组中出现一次。因此,可以使用哈希表记录每个元素在数组中出现的次数,然后遍历从1到n的每个数字,分别找到出现2次和出现0次的数字,即为重复的数字和丢失的数字所需知识创建HashMap的实例化对象map.put() 方法、getOrDefault()方法的使用。代码及运行结果class Solution{ public int[] findErrorNums(i原创 2022-01-03 21:06:53 · 286 阅读 · 0 评论 -
验证回文字符串 Ⅱ
题目-验证回文字符串 Ⅱ解题思路先考虑正常回文串的思路:采用双指针,定义左右指针,初始时指向第一个和最后一个字符,每次判断左右指针的值是否相同,所有都相同则是回文串,这就可以是方法一。对于需要删除一个字符的情况下,同样可以使用双指针,依然是最左和最右两个指针,左右比对,移动指针,然后找到左右指针不同处,分情况删除其中一个对应字符。并调用方法一,判断分情况的字符是否是回文串。代码class Solution{ public boolean validPalindrome(String s){原创 2021-12-31 16:01:28 · 231 阅读 · 0 评论 -
提莫攻击算法
题目解题思路原创 2021-12-30 22:03:00 · 2541 阅读 · 0 评论 -
有效的括号字符串
题目给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:任何左括号 ( 必须有相应的右括号 )。任何右括号 ) 必须有相应的左括号 ( 。左括号 ( 必须在对应的右括号之前 )。*可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。一个空字符串也被视为有效字符串。思路这道题我一直没写对,难受死了,最后发现是考虑漏了情况。我最开始的思路是,统计左括号,然后t++;统计右括号,t–;额外统计*号。这原创 2021-12-28 17:47:07 · 725 阅读 · 0 评论 -
螺旋矩阵 II
题目给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例 1:输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:输入:n = 1输出:[[1]]思路这个问题可以分层考虑,只需要完整表示出最外面一层,内层只需要通过循环就可以逐层实现而最外一层,只需要考虑“从左到右一行”、“从上到下一列”、“从右到左一行”、“从下到上一列”四个方向,即可解决一层。代码class Solu原创 2021-12-27 21:23:27 · 228 阅读 · 0 评论 -
Pow()
题目思路主要使用二分法来优化时间复杂度采取了两种方法嵌套的方式需要注意pow()方法中指数的奇偶性,为此分为两种情况讨论代码class Solution { public double myPow(double x, int n) { //限制底数不为0 if (x == 0){ return 0; } //两种特殊情况,即:底数为1,指数为0,所得值为1原创 2021-12-10 14:16:06 · 671 阅读 · 1 评论 -
java面向对象深化理解(实例)
题目注意的点类的继承有单一性,一个子类只能继承一个父类;子类可以继承父类的变量并调用,但需要在子类构造方法中添加super()来显性的继承父类变量想要完整的打印类中信息,就需要自己重写系统自带的toString()方法,toStirng()方法默认打印地址值,通过改写可以诸如:数组、字符、类的全部信息等操作。代码package PoCircle;import java.util.Scanner;class Po{ private double x; private do原创 2021-12-03 12:43:44 · 331 阅读 · 0 评论 -
LeetCode每日一题之验证回文数
LeetCode每日一题之验证回文数给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。知识点引入之string、stringBuilder、stringBuffer的区别1、String类中使用字符数组保存字符串 ,final 修饰当然是不可变的,用String来操作字符串的时候,一旦我们字符串的值改变,就会在内存创建多一个空间来保存新的字符串,即当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,一旦遇到复杂的操作,St原创 2021-11-10 09:19:17 · 95 阅读 · 0 评论 -
LeetCode每日一题之二维数组中的查找
LeetCode每日一题之整数反转在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定target=7,返回true给定target=3,返回false思路1、这道题核心就在于设置两个指针对象,实现对行和列中元素的定位2、一方面可以暴力解法原创 2021-10-26 19:12:42 · 122 阅读 · 0 评论 -
LeetCode每日一题之两数之和
LeetCode每日一题之两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。思路1、这道题要用到遍历、判断。2、这道题的解法差不多为暴力遍历解法,将数组中所有的元素遍历后比较3、与冒泡排序算法类似解法:public class Solution { public int原创 2021-10-24 11:53:47 · 1057 阅读 · 0 评论 -
LeetCode每日一题之整数反转
LeetCode每日一题之整数反转给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。思路1、这道题要用到遍历、依次读取每个位数2、这道题的解法将输入的数的每一位从右往左截取后,再从左往右拼接3、每次循环实现一次截取与拼接解法:class Solution { public int reverse(int x){ int revers原创 2021-10-25 16:47:44 · 209 阅读 · 0 评论 -
LeetCode每日一题(第一题)之构造矩形
LeetCode每日一题(第一题)之构造矩形作为一位web开发者, 懂得怎样去规划一个页面的尺寸是很重要的。 现给定一个具体的矩形页面面积,你的任务是设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面。要求:你设计的矩形页面必须等于给定的目标面积。宽度 W 不应大于长度 L,换言之,要求 L >= W 。长度 L 和宽度 W 之间的差距应当尽可能小。 你需要按顺序输出你设计的页面的长度 L 和宽度 W。`思路思路与要求的点为条条对应关系面积一定,则需要设定两个变量值的原创 2021-10-23 16:21:59 · 239 阅读 · 2 评论