3 爱敲代码的小黄

尚未进行身份认证

我要认证

☞梦想进大厂的一只程序猿☜ ☞期望毕业前力扣刷够400题☜ ☞正在复习数据结构和算法☜ ☞正在JAVA培训中☜

等级
TA的排名 4w+

【剑指offer】-和为S的连续正数序列-39/67

1. 题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!2. 题目分析给你一个数字sum,让你在0~sum之间求连续数字加起来等于sum的序列首先,比较好想的是O(n*n)的做法,外层从1到sum,内

2020-07-06 01:12:06

【剑指offer】-和为S的两个数-38/67

1. 题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。2. 题目分析使用双指针法,分别指向开头和结尾如果:if (array[left] + array[right] > sum) 则 right--;如果:array[left] + array[right] < sum 则 left++;3. 题目代码public ArrayList<Integer> FindNumbersW

2020-07-06 00:44:25

【剑指offer】-平衡二叉树-37/67

1. 题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树2. 题目分析对于一个二叉树是否为平衡二叉树,我们主要判断其左子树和右子树的深度是否小于等于1;用递归来实现,判断当前的左子树和右子树差值是否小于等于1,进而判断其是不是平衡二叉树3. 题目代码public class Solution { private boolean isBalanced=true; public boolean IsBalanced_S

2020-07-05 19:26:24

【剑指offer】-二叉树的深度-36/67

1. 题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。2. 题目分析对于二叉树的深度求值,采取递归,递归其左子树和右子树中最大的+1(root结点),最后返回即3. 题目代码public class Solution { public int TreeDepth(TreeNode root) { if (root == null) { return 0; } else { int h2 =

2020-07-05 19:09:42

【剑指offer】-数组中只出现一次的数字-35/67

1. 题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。2.题目分析这题类似于【剑指offer】- 第一个只出现一次的字符位置-33/67我们需要了解一些关于二进制的符号:一)按位与&两位全为1,结果才为10&0=0;0&1=0;1&0=0;1&1=1(二)按位或 |只要有一个为1,结果就为1。0|0=0; 0|1=1;1|0=1;1|1=1;(三)异或 ^两个相应位为“异”(

2020-07-04 23:20:43

【剑指offer】- 第一个只出现一次的字符位置-34/67

1. 题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)2. 题目解析给定一个字符串,让你求这个字符串只出现一次的字符,我们一般的想法都是遍历一遍字符串,依次和后面的相比较,如果一样的话,就去掉。这里的时间复杂度为(On*n)我们可以通过java中的hashmap去做,遍历一遍字符串,判断这个字符在不在hashmap中,如果不在,则输入map.put(str.ch

2020-07-04 21:26:37

【剑指offer】-把数组排成最小的数-33/67

1. 题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。2. 题目描述题目的意思:给你一个数组,要求你返回一个字符串,为这些数组中最小的数(字符串)我们需要对数组内的数字进行排序,这里进行的排序指的是对其在数组内的位置进行排序,这里我们需要一个规则,如果NM > MN,则N>M;这里的大于不是常规的大于关系,是我们自己定义的一个关系将数组依次存入Arr

2020-07-04 21:03:26

【LeetCode-每日一题】-378. 有序矩阵中第K小的元素

1. 题目描述2. 题目分析这个题目类似于【剑指offer】-二维数组的查找-01/67在此题的基础上进行一些扩展,题目要求我们找到矩阵中第K小的元素,也就是在1~15的范围中,找到第K小的数字。我们对1~15进行二分,用mid来判断当前矩阵中小于等于mid的的有多少(count),如果count小于K的话,也就是在证明当前的元素过于小,所以,需要left = mid + 1;如果count大于等于K的话,也就是证明当前的元素过于大或者正好,所以,需要right = mid。这里比较困惑的一点

2020-07-02 23:58:11

【LeetCode-每日一题】-718. 最长重复子数组

1. 题目描述2. 题目解析首先最先想到的应该是暴力,也就是直接跑3层循环,暴力解出ans的最大值其次,此题是一个动态规划,我们来看一张图:相当于我们求的是斜着的这一部分最多可以连续多长,此时动规的公式就比较明显了,array[i][j] = array[i-1][j-1] + 1;最后是一种解法:滑动窗口,顾名思义,也就是通过保持A不变,滑动B,保持B不变,滑动A,最后取出其中最大的ans;3. 题目代码1. 动规public static int findLength1(in

2020-07-01 22:52:37

【剑指offer】-数字在排序数组中出现的次数-32/67

1. 题目描述统计一个数字在排序数组中出现的次数。2. 题目分析题主一开始的方法:看见有序,使用二分,查找到target,向前向后分别遍历到不等于target的数字,因为数组中的target出现的次数是不确定的,所以,可能查找到n次,相当于O(n);面试中,这种写法会被paas掉,所以我们需要用二分查找找到第一次出现target的下标,最后一次出现target的下标,对于target出现的第一次下标,采用以下方式当mid == 0的时候,也就是证明当前的数是从下标0开始的,则直接返回0(mid

2020-07-01 17:36:45

【剑指offer】-1~n整数中1出现的次数-31/67

1. 题目描述求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下113中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。2. 题目分析最常见做法和想到的就是从1~n依次遍历,然后遍历每一个数字的每一位数,判断其是不是等于1,累加return这是介绍一种新的解法,类似找规律的样子...

2020-06-29 18:36:50

【Leetcode】- 第 29 场双周赛

5432. 去掉最低工资和最高工资后的工资平均值遍历数组,求出最大值和最小值,用(sum(数组之和)- max - min)/ 数组的长度-2代码class Solution { public double average(int[] salary) { double sum = 0; double max = salary[0]; double min = salary[0]; for (int i = 0; i < salary.length; i++) { i

2020-06-28 01:47:47

【LeetCode-每日一题】-16. 最接近的三数之和

1. 题目描述2. 题目分析类似于三整数之和对数组进行排序,跑两个循环,时间复杂度为(On*2)每次判断当前之和与target的差距,最小值的时候,也就是最接近的三数之和3. 题目代码class Solution { public static int threeSumClosest(int[] nums, int target) { Arrays.sort(nums); int min = 999999999; int ans = nums[0] + nums[1] +

2020-06-24 13:44:21

【LeetCode-每日一题】-67. 二进制求和

1. 题目描述2. 题目分析简单的模拟,利用二进制进行模拟的加减。两个字符串从后往前遍历,分别相加(sum)若 sum == 0 则当前添加的为0若 sum == 1 则当前添加的为1若 sum == 2 则当前添加的为0且将sum的值 / 2(也就是当再次回来的时候,需要从1开始加)3. 题目代码class Solution { public static String addBinary(String a, String b) { int sum = 0; String

2020-06-23 23:44:08

【LeetCode-每日一题】-739-每日温度

1. 题目描述2. 题目解析大致的意思是:在今天的以后几天内,有哪一天是比今天的气温升高的,如果有的话,求出其中的天数差,如果没有的话,用0代替。一开始用的暴力,然后超时。这个题目用到了单调栈的原理。...

2020-06-21 23:10:06

【LeetCode-六月每日一题-】-回文数

1. 题目描述判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。2. 题目分析经典的回文题目,判断左右是否相等,相等的话返回true,否则返回false第一种方法:转为字

2020-06-21 22:30:46

【LeetCode-每日一题】-1014. 最佳观光组合

1. 题目描述2. 题目分析题目的意思,让你求(A[i] + A[j] + i - j)的最大值,并且 i < j可以进行一下交换,也就是求(A[i]+ i )+ (A[j] - j)的最大值,条件还是i < j我们只需要找到(A[i]+ i )的最大值,加上(A[j] - j)最大值,当然条件还是i < j重要代码:max = Math.max(max, ans + A[j] - j); ans = Math.max(ans, A[j] + j);3. 题目代码c

2020-06-18 00:04:14

【LeetCode-每日一题】-面试题46. 把数字翻译成字符串

1. 题目描述给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi”2. 题目分析这个题目类型和跳台阶差不多,一阶或者两阶的跳,求到N阶有多少种方法对于12258来

2020-06-16 09:12:31

【剑指offer】-连续子数组的最大和-30/67

一、题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)二、题目分析如果给定的数字都是正数,则直接相加就可以

2020-05-26 18:55:21

【剑指offer】-最小K个数-28/67

一、题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。二、题目分析典型的排序题目,直接使用-快速排序注意一下,input数组的空值和input.length的值与K值的比较三、题目代码package offer;import java.util.ArrayList;/* * 最小K个数 */public class Test28 { static ArrayList<Integer>

2020-05-26 13:42:25

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 阅读者勋章Lv1
    阅读者勋章Lv1
    授予在CSDN APP累计阅读博文达到3天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。