自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(129)
  • 资源 (1)
  • 收藏
  • 关注

原创 小知识点记录

1、如何保证Java小数计算不丢失精度使用BigDecimal 函数 BigDecimal v1 = new BigDecimal("0.3"); BigDecimal v2 = new BigDecimal("0.1"); System.out.println(v1.subtract(v2));//0.2

2022-03-19 10:52:16 293

原创 recyclerView

执行过程:…public class LinearRecyclerViewActivity extends AppCompatActivity { private RecyclerView mRvMain; private List<Fruit> fruitList;@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstance

2021-07-31 22:40:38 110

原创 初学01-夜神模拟器连接Android Studio

前言:由于工作需要,Java方向转安卓开发,记录下安卓学习过程。Android Studio在安装时没有默认安装模拟器,使用下载自带的模拟器时HAXM一直出问题,所以只能选择外部模拟器。Step1:成功安装好Android StudioStep2:下载夜神模拟器,官方地址:https://www.yeshen.comStep3:下载成功之后进行安装,记住安装路径Step4:在安装路径下的bin文件,比如:D:Program Files\Nox\binStep5:在该路径下打开cmd,如下图所示

2021-05-25 21:10:17 3768 1

原创 刷题

刷题一、链表public class ListNode{ int val; ListNode next; ListNode (int x){ val = x; next = null; }}1.相交链表public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { ListNode l1

2020-09-17 22:24:12 115

原创 字节笔试题

题目:P为给定的二维平面整数点集。定义 P 中某点x,如果x满足 P 中任意点都不在 x 的右上方区域内(横纵坐标都大于x),则称其为“最大的”。求出所有“最大的”点的集合。(所有点的横坐标和纵坐标都不重复, 坐标轴范围在[0, 1e9) 内)如下图:实心点为满足条件的点的集合。请实现代码找到集合 P 中的所有 ”最大“ 点的集合并输出。思路:这题思路其实不难,先按着x轴进行从小到大排序,然后从后往前进行比较,当当前的y值大于最大的maxNum(后面各个点的最大值)值时,说明右上角区域没有点,则将其加入

2020-08-15 22:56:40 803

原创 20.有效的括号

题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。思路:右括号前面必须是相同的左括号,这种题目常见的思路就是使用栈。先把括号组放入到map中,右括号作为key,左括号作为value;依次遍历字符串,当遇到右括号时,查看stack的头看看是否一样,如果不一样则返回fasle;遇到左括号时直接压入stack。return的stack是否

2020-08-14 10:34:43 98

原创 经典题:前k个高频元素 必须要会

题目:给定一个非空的整数数组,返回其中出现频率前K高的元素思路:建立map用来存放每个数出现的频率,这一步大家都能想到,关键是怎么从map中读出前k个高频元素;这个时候我们应该想到使用优先队列;这边有两种方式,一种是使用默认的最小堆然后设定堆的大小为k;另一种方式是将最小堆转成最大堆,直接输出前k个元素。这里需要注意的是,队列中存入的map的entry,比较的时候直接根据entry中的getValue来比较频率。回顾:KeySet(): get() 遍历取出key的值entrySet(): g

2020-08-14 09:18:50 109

原创 394. 字符串解码

有一个多星期没有刷题,因为在泰州移动总部实习,才刚来不久不敢偷偷准备秋招,现在部门混的差不多了,可以偷偷准备秋招笔试。刷题果然要一直刷啊,要保持手感;今天做题状态不好,一些api记得也不是很清晰;所以,准备接下来的一段时间需要做好计划,分好任务和时间段。题目:给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格

2020-08-12 17:05:12 143

原创 198.打家劫舍

题目:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。思路:这道题使用动态规划解题,当

2020-08-09 21:58:38 817

原创 leetcode 15.三数之和

题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。class Solution { public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> list = new ArrayList<>(); if(nu

2020-08-05 17:29:09 91

原创 dfs模版题:力扣79单词搜索

题目:给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。思路:这道题是dfs的模版题,在进行路径选择的时候,需要标记下已经走过的,在进行回溯的时候,需要回复。class Solution { boolean res = false; boolean[][] visited; int m; int n; public

2020-07-31 23:21:46 184

原创 leetcode42.接雨水---Java

题目:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6思路:这道题我的思路是使用单调栈来进行求解,栈中存放的是墙的下标。当current指向的墙比当前栈顶的墙低时,说明可以存水,即压入栈;如果比当前栈顶的墙高,则栈中元素进行弹出,并计算积攒的雨水量。先判断左右墙的高度,取最低的://确定左右最低高度int min = Math.min(height[stack.peek(

2020-07-29 13:20:04 122

原创 leetcode524.通过删除字母匹配到字典里最长的单词

难度:中等题目:给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。思路:首先先读懂题目,题目的意思是先在字符串字典(list数组)先判断每一个位置的字符串可不可以通过给定的字符串进行删除某些字符得到,如果能则表示符合要求,那么之后需要在符合要求的字符串中找出长度最长并且字典顺序最小的。对于字典顺序最小的理解是:a.compareTo(b)>0,说明a的字典

2020-07-28 12:44:54 164

原创 判断链表是否存在环---Java

题目:给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。思路1:利用set集合遍历给定的链表,当set.contains(head)等于true时,有遍历过的元素,说明链表中存在环。/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode ne

2020-07-27 15:35:11 129

原创 双指针 680.验证回文串ll

题目:给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: “aba”输出: True示例 2:输入: “abca”输出: True解释: 你可以删除c字符。思路:可以删除一次,因此,遇到不一样的字符时,我们需要判断删除左边一个剩下的是不是回文串和删除右边的一个剩下的是不是回文串。使用双指针。class Solution { public boolean validPalindrome(String s) { int left = 0

2020-07-27 10:51:58 93

原创 leetcode 345. 反转字符串中的元音字母

编写一个函数,以字符串作为输入,反转该字符串中的元音字母。//元音字母:a e i o uclass Solution { public String reverseVowels(String s) { char[] chr = s.toCharArray(); int left = 0; int right = chr.length-1; String s1 = "aeiouAEIOU"; while(left &

2020-07-27 00:01:17 77

原创 leetcode633. 平方数之和

题目:给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c。示例1:输入: 5输出: True解释: 1 * 1 + 2 * 2 = 5示例2:输入: 3输出: False思路:双指针class Solution { public boolean judgeSquareSum(int c) { int left = 0; int right = (int)Math.sqrt(c); while(l

2020-07-26 14:34:40 118

原创 剑指offer43.1~n整数中1出现的次数

题目:输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。示例1:输入:n = 12输出:5示例2:输入:n = 13输出:6思路:借鉴题解区一位大佬的思路:class Solution { public int countDigitOne(int n) { return f(n); } public int f(int n){

2020-07-26 14:11:12 98

原创 树的最近公共祖先

1.二叉搜索树思路:二叉搜索树由于是排过序的,所以我们可以先判断当前结点和两个结点的大小,在做判断。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public T

2020-07-25 10:18:50 123

原创 剑指 Offer 65. 不用加减乘除做加法

无进位的运算:0001+0010=0011;可以用异或来运算。有进位的运算:需要记录进位,在用进位进行yu运算。class Solution { public int add(int a, int b) { while( b != 0){ int c =(a&b)<<1;//记录进位的 a=a^b;//非进位的和 b=c;//进位 } return a;

2020-07-24 19:59:39 70

原创 剑指offer14-l.剪绳子

题目:给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。class Solution { public int cuttingRope(int n) { int[] dp = new int[n+1];

2020-07-24 17:36:20 72

原创 剑指 Offer 57 - II. 和为s的连续正数序列

题目:输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。class Solution { public int[][] findContinuousSequence(int target) { List<int[]> list = new ArrayList<int[]>(); int left =1; int rig

2020-07-24 16:37:34 73

原创 剑指 Offer 46. 把数字翻译成字符串

题目:给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。思路:主要看第i位数和第i-1位数,能不能组合也就是是不是小于25;如果不能组合那么,单独算i也就和dp[i-1]是一样的,因为每一个数都得翻译。如果能够组合,则需要将组合后的和单独的一起加起来,也就是两部分,先算组合的,将组合的部分看成一个整体,即dp[i-2];再算单

2020-07-24 13:10:55 72

原创 剑指 Offer 66. 构建乘积数组

题目:给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B 中的元素 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。按照题意可以知道,b[i]位置的元素对应的a[i] =1;因此我们的第一种思路就是先把a[i]==1;然后遍历进行乘积。但是这样跑出来以后,测试案例最后一个会通不过,时间超时。因此,我们换一个思路,上面这个思路,出现了重复计算没有利用之前计算的信息。我们可以先计算下三角的值,然后在计算上三角的值。具体

2020-07-20 11:15:27 48

原创 剑指 Offer 48. 最长不含重复字符的子字符串(重要)

题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。思路:用map存储当前位置的元素和位置,当遇到相同元素时,start更新为map中存储的元素的位置,然后put一下更新map中的新值。后面在遇到相同的就继续更新start为上一次出现的位置,同时将map中的值进行更新。初始值:start的初始值为-1。需要注意的是,更新start的值时,需要取最大的那

2020-07-19 15:07:40 132

原创 剑指 Offer 47. 礼物的最大价值

题目:在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?思路1:使用dfs做,结果超时。class Solution { int max= 0; public int maxValue(int[][] grid) { dfs(grid,0,0,0); return

2020-07-19 11:47:19 83

原创 剑指 Offer 53 - II. 0~n-1中缺失的数字

题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。思路:排序数组的解法其实一般使用二分、双指针比较多,但是对于这道题,所有数字都是唯一而且是递增排列,因此,我们可以直接比较这个数组的值和这个位置即可。另外需要搞清楚题目的条件,我因为没理解题意,边界出了问题。题目的意思是,咱们有一个数组,长度就是n,数组是从0-n-1依次排的,个数是n个;那么题目的意思就是在0到n的中有且只有一个数字

2020-07-18 15:03:37 154

原创 剑指 Offer 63. 股票的最大利润

题目:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?思路;这道题目使用动态规划做,第一次看题的时候一直在想什么时候买,什么时候卖,题目要求是要利润最大,因此直接在价格i天前最低的时候买就行,接下来就是计算每一个卖出的利润(当天的价格减去前面最低的价格)。class Solution { public int maxProfit(int[] prices) { //动态规划,初试值,dp[0] = 0; //状态转移方

2020-07-18 14:32:51 70

原创 剑指offer59-II.队列的最大值

题目:请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。若队列为空,pop_front 和 max_value 需要返回 -1思路;这道题和之前求min那个思路差不多,而且和上一道题也差不多。就是用递减。这里我们回顾一下单点栈,这个是用来找后面第一个比自身大的数时用到了单点栈,用一个map存数值和位置。在这里我们使用单调队列,递减的,来快速找出队列中最大的值(队头)。注意:在进行队

2020-07-18 13:05:53 95

原创 剑指offer59-I.滑动窗口的最大值

题目:给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。思路:我刚开始是使用的是优先队列做,写完之后有4个测试案例没有通过,后来发现,我在删除队列元素的时候只考虑了当删除的数组的元素等于队列栈顶元素时,就删除队列的元素;这样考虑会出现这样的问题,比如这个测试案例:[9,10,9,-7,-4,-8,2,-6]5当前面出现一样的元素时,只会删除一个最大的,因此后面还是会有最大的;所以我们需要同时在队列中删除数组中删除的那个元素。class Solution { int

2020-07-18 11:30:14 178

原创 剑指offer41.数据流中的中位数

题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。示例一:输入:[“M

2020-07-17 14:37:03 145

原创 给定有字母和数字的字符串输出最大的16进制

输出十六进制,首先判断是否为数字,Character.isDigit()。转成16进制:Integer.parseInt( , 16) public int solve(String s){ int begin = 0; int end = 0; int res = 0; for(int i=0;i<s.length();i++){ if(Character.isDigit(s.charAt(i)) ||

2020-07-17 12:39:04 333

原创 剑指offer62.圆圈中最后剩下的数字

0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例 1:输入: n = 5, m = 3输出: 3示例 2:输入: n = 10, m = 17输出: 2方法一:这是著名的约瑟夫环问题,可以使用ArrayList进行纯暴力解法。假设当前需要删除的位置为index,则下一个要删除的

2020-07-17 11:42:27 66

原创 剑指offer61.扑克牌中的顺子

题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。示例 1:输入: [1,2,3,4,5]输出: True示例 2:输入: [0,0,1,2,5]输出: True思路:这道题我没有其他方法,因为就5个数,数据量不大,所以直接用的数学分情况讨论。首先,由题意可知,0可以替代任何数,因此,我们先找出0的个数,当个数大于4时,是一定可以凑成顺子的;其次,开始讨

2020-07-16 21:53:32 61

原创 数据库常见的优化

1.总是有不止一种方法编写同一条select语句,应该多使用联结、并、子查询等,找出最佳方法2.绝不要检索比需求还要多的数据3.导入数据时,关闭自动提交。4.必须索引数据库表以改善数据检索的性能5.LIKE很慢后序继续补充...

2020-07-16 16:06:17 74

原创 剑指offer 57.和为s的两个数

题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]这道题用暴力解是通过不了的,直接超时;我的思路是:使用双指针的解法,定义一个left指针和right指针;由于给的是递增的

2020-07-16 14:14:42 70

原创 剑指offer49.丑数

题目:我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。本题链接:https://leetcode-cn.com/problems/chou-shu-lcof/solution/chou-shu-ii-qing-xi-de-tui-dao-si-lu-by-mrsate/class Solution { public int nthUglyNumber(int n) { int[] dp = new int[n];

2020-07-16 13:36:19 112

原创 剑指offer17.打印从1到最大n位数

题目:输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。思路:做的这几道数学类的题,都比较简单,这道题也是一样,先是根据位数,确定下范围,比如n=1,则res=10,所以数的范围就在1-9之间,最后建立数组打印即可。class Solution { public int[] printNumbers(int n) { int res = 1; for(int i=1;i<=n;i+

2020-07-16 11:31:40 161

原创 剑指offer16.数值的整数次方 ---剑指64,求1+2+3+4...---剑指15.二进制中1的个数

题目:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。示例 1:输入: 2.00000, 10输出: 1024.00000示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25思路:这道题使用快速幂的解法来做主要是每次判断b是否为0,为0的话就参加计算,x每次继续变化。class Solution { p

2020-07-16 09:59:17 96

原创 剑指 Offer 10- I. 斐波那契数列和青蛙跳台阶的问题

题目:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。动态规划:class Solution { public int fib(int n)

2020-07-15 23:55:31 94

自动控制原理第五版

考研复习用书 自动控制原理 胡寿松 第五版 电子档

2018-05-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除