自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 36、有效的数独 valid sudoku

详细题解/** 三个空间 代表行,这一行的这个元素是否出现 代表列 代表3*3的盒子*/class Solution { public boolean isValidSudoku(char[][] board) { int[][] row = new int[9][10]; int[][] col = new int[9][10]; int[][] box = new int[9][10].

2021-04-08 08:50:44 62

原创 290. word pattern 单词规律

包含字母的字符串a和包含单词空格的字符串b内字母和单词间的映射输入: pattern = “abba”, str = “dog cat cat dog”输出: true//在一个map中存取key获取value来进行比较class Solution { public boolean wordPattern(String pattern, String s) { String[] arr = s.split(" "); if(arr.length != patt

2021-04-08 08:01:48 97

原创 168. excel列表名称excel sheet column number

1 -> A27 -> AA/** 注意zz 26要分散*/class Solution { public String convertToTitle(int n) { StringBuilder sb = new StringBuilder(); while(n!=0) { //1.1获取低位字母 int count = n%26; //1

2021-04-07 08:57:23 71

原创 38 count and say 外观数列

输入 1 输出 12 : 11(前一个有1个1)3 :21(2个1)4 :12115 : 111221//双指针递归class Solution { public String countAndSay(int n) { if(n == 1) return "1"; String str = countAndSay(n-1); int len = str.length(); int start = 0;

2021-04-07 08:38:29 50

原创 34. 在排序数组中查找元素的第一个和最后一个位置

/** 一个二分方法找第一个 一个二分方法找第二个 第一个没找着就直接返回*/class Solution { public int[] searchRange(int[] nums, int target) { int len = nums.length; if(len == 0) return new int[]{-1,-1}; int left = leftSearch(nums, target, 0, len-.

2021-04-05 09:38:12 63

原创 35. 搜索插入位置

/** 左侧找最后一个大于等于的 右侧找第一个小于等于的*/class Solution { public int searchInsert(int[] nums, int target) { int len = nums.length; if(len == 0) return 0; int left = 0; int right = len-1; while(left <= right).

2021-04-05 08:59:06 50

原创 309.最佳买卖股票时机含冷冻期

给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。[1,5,1,2,7]9转态转移 class Solution { public int maxProfit(int[] prices) { int len = prices.le

2021-04-03 08:47:25 38

原创 57. 插入区间

给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]输出:[[1,2],[3,10],[12,16]]解释:这是因为新的区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠。/* 画图分出重叠和不重叠的部分*/ class So

2021-04-03 08:12:15 32

原创 88、Merge Sorted Array

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]//三个指针,m和n的长度小于0就把nums2截取赋

2021-04-02 08:45:51 70

原创 387. first unique character in a String

小写字母/* 空间换时间 存储26个小写字母所对的数量 遍历数量*/ class Solution { public int firstUniqChar(String s) { int[] arr = new int[26]; for(char c:s.toCharArray()) { arr[c-'a']++; } for(int i=0;i<s.lengt

2021-04-02 08:38:47 48

原创 316、去除重复字母remove duplicate letters

不能打乱相对顺序要按字典序输入adbcd : 输出abcd//单调栈class Solution { public String removeDuplicateLetters(String s) { int len = s.length(); //1.特判 if(len < 2) return s; //2.1用于判断字符是否已经出现过 boolean[] flag = new boolean[26];

2021-04-02 08:27:58 67

原创 87.扰乱字符串 scramble string

详细题解class Solution { public boolean isScramble(String s1, String s2) { int len1 = s1.length(); int len = len1; int len2 = s2.length(); if(len1!=len2) return false; if(s1.equals(s2)) return true; int[] n

2021-04-02 08:22:00 69

原创 164. 最大间距

给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。如果数组元素个数小于 2,则返回 0。考察的是排序基数排序:10个桶,按个位、十位...放class Solution { public int maximumGap(int[] nums) { int len = nums.length; if(len<2) return 0; //找出最大值 int max = nums[0];

2021-04-01 10:00:28 47

原创 334. 递增的三元子序列

给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。/* 记录最小值和中间值,出现最大值就返回*/class Solution { public boolean increasingTriplet(int[] nums) { int l.

2021-04-01 09:40:01 50

原创 23.merge k sorted lists合并k升序个链表

输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, Li

2021-04-01 09:31:22 45

原创 245. 最短单词距离(三)

给定一个单词列表和两个单词 word1 和 word2,返回列表中这两个单词之间的最短距离。word1 和 word2 是有可能相同的,并且它们将分别表示为列表中两个独立的单词。示例:假设 words = [“practice”, “makes”, “perfect”, “coding”, “makes”].输入: word1 = “makes”, word2 = “coding”输出: 1输入: word1 = “makes”, word2 = “makes”输出: 3注意:你可以假设

2021-03-31 08:21:07 186

原创 28.求子串出现的一个的位置

//复杂度O(n+m)//求最大公共前后缀#define SIZE 100 void calc_lcp(int* d, const char* p){ //初始化,从一开始到最后。从0开始到最后第二个。求公共部分 int i = 1, j = 0, np = strlen(p); //d[0]为0 memset(d, 0, sizeof(int) * np); while (i < np) { //相等 if..

2021-03-31 08:13:27 128

原创 7.reverse integer

输入:x = -123输出:-321输入输出都为32位整数,不可使用64位存储/* 获取尾数,返回值*10+尾数*/class Solution { public int reverse(int x) { int res = 0; //求翻转 while(x != 0) { int temp = x % 10; //判断是否越界 if( res&g

2021-03-31 07:34:35 104

原创 14. Longest Common Prefix

字符串数组//求第一个和第二个的前缀,在求和第三个的class Solution { public String longestCommonPrefix(String[] strs) { int len = strs.length; if(len == 0) return ""; String ans = strs[0]; for(int i=1; i<len; i++) { int

2021-03-31 07:34:06 119

原创 122. 买卖股票的最佳时机 III

123. 买卖股票的最佳时机 III难度困难592给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [3,3,5,0,0,3,1,4]输出: 6解释: 在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。随后,在第 7 天(股票价格 = 1

2021-03-30 16:53:08 39

原创 122. 买卖股票的最佳时机 II

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6

2021-03-29 08:30:55 48

原创 295. 数据流的中位数

中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。/** 优先队列*/ class MedianFinder { private int count; pr

2021-03-27 08:48:13 58

原创 20 valid parentheses

输入:s = “(]”输出:falseclass Solution { public boolean isValid(String s) { //栈 Stack<Character> stack = new Stack(); int len = s.length(); for(char c:s.toCharArray()) { //为左边的就加入右边的

2021-03-27 08:47:05 63

原创 81. search rotated sorted array(2)

假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。示例 1:输入: nums = [2,5,6,0,0,1,2], target = 0输出: true/** l,m,r相等时只能缩小范围*/class Solution { public boolean search(int[] nums,

2021-03-26 11:46:23 55

原创 13 roman to Integer 罗马数字转整数

输入: “IX”输出: 9输入: “LVIII”输出: 58解释: L = 50, V= 5, III = 3.//左边数字小于右边的就减左边的,反之加左边的//字符对应的数字建个方法用switch来获取 class Solution { public int romanToInt(String s) { char[] arrChar = s.toCharArray(); int sum = 0; int pre = biao(arrC

2021-03-26 11:28:19 56

原创 33.search rotated sorted array

升序排列的整数数组 nums 在预先未知的某个点上进行了旋转(例如, [0,1,2,4,5,6,7] 经旋转后可能变为 [4,5,6,7,0,1,2] )。请你在数组中搜索 target ,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。示例 1:输入:nums = [4,5,6,7,0,1,2], target = 0输出:4/**因为是有序数组的旋转所以说必定有部分是有序的,我们关心的是头,中,尾三数1 2 3 4 5(原数)2 3 4 5 1(情况1) mi

2021-03-26 09:46:15 45

原创 324 wiggle sort

给你一个整数数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]… 的顺序。你可以假设所有输入数组都可以得到满足题目要求的结果。示例 1:输入:nums = [1,5,1,1,6,4]输出:[1,6,1,5,1,4]解释:[1,4,1,5,1,6] 同样是符合题目要求的结果,可以被判题程序接受。/** 排序,穿插 小的大,大的大,小的大*/ class Solution { publi

2021-03-26 09:35:45 52

原创 75. sorted colors

75给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。示例 1:输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2]/** 三个指针 一个用于遍历 一个用于标记第一个 一个用于标记第一个二*/class Solution { public void sortColors(int[] nums) {

2021-03-26 09:29:37 133

原创 287. 寻找重复数

给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,找出 这个重复的数 。条件:额外空间1时间 < n^2不可破坏数组详细题解/* 取1到n-1的中位数,判断数组中的数小于等于其的个数,再做判断 二分:用时间换空间Nlog(N) */ class Solution { public int findDuplicate(int[] nu

2021-03-26 09:07:43 45

原创 29 divide two Integers(两数相除)

不能使用*/, int,超过的数以integer.max显示输入 Integer.MIN_VALUE , -1输出 Integer.MAX_VALUE/** 都转为负数,正数的值小*/class Solution { public int divide(int dividend, int divisor) { //求得两数相处的符号 boolean isPositive = (dividend ^ divisor ) >= 0;

2021-03-25 10:25:20 51

原创 205 isomorphic string (两字符串相互映射)

输入:s = “egg”, t = “add”输出:true同构字符串//两字符串的映射表进行比较class Solution { public boolean isIsomorphic(String s, String t) { //用hashmap也行,但是空间占用大 int[] arr1 = new int[128]; int[] arr2 = new int[128]; for(int i=0;i<s.length

2021-03-25 10:03:22 66

原创 5 longest palindromic substring 最长回文子串

输入:s = “babad”输出:“bab”/* 暴力破解法n^3 依次判断是否是回文,并记录*/class Solution { public String longestPalindrome(String s) { char[] charArr = s.toCharArray(); int len = charArr.length; //比较两个以上的数是否是回文 int begin = 0, maxLe

2021-03-25 09:42:36 43

原创 42.接雨水

前言:左右最大值中小的减去当前就是此处有的雨水可以用额外空间来存储左右的最大值如何进行空间优化? /* 首尾作为maxLeft,maxRight,后一个前一个为left/right 当maxLeft<maxRight,我们可以得出left=maxleft-hgiht[left],再求左边最大 反之 right=maxRight-hgiht[right] */ class Solution { public int trap(int[].

2021-03-25 09:19:18 51

原创 leetCode 31 下一个排列

/** 如果数组都是降序(3 2 1) 那就直接改为升序返回(1 2 3) 不是 (5 8 7 6 4) 从后找出第一个升序对(i,j)(5 8) j到len-1都是降序,在此中从后往前找出第一个大于nums[i]的数(6) 交换j和k(6 8 7 5 4) 再将j到len-1升序(6 4 5 7 8)*/class Solution { public void nextPerm.

2021-03-25 08:01:40 48

原创 前后端分离demo

码云地址vueelementspringbootmybatis视频连接vue ui创建vue项目勾选Router, Vuex。 不勾选Linter/Formatter。勾选user history不保存模板网页任务serve运行输出(点击链接)cmd: ctrl+c退出IDea导入文件Terminal: npm run serve (启动服务)vue结构:app.vue为主体,路由窗口在切换创建springboot项目选择

2021-03-24 19:59:40 141

原创 Markdown学习

Markdown学习标题字体粗体斜体粗体+斜体中心划线引用啦啦啦分割线图片[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x2GalD0g-1615428813205)(C:\Users\Administrator\Pictures\Screenshots\屏幕截图(1)].png)超链接随意列表ABc123表格姓名年龄学号张三18123‘右键-插入’代码public ...

2021-03-11 10:14:29 34

空空如也

空空如也

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

TA关注的人

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