![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
云养猫v2
这个作者很懒,什么都没留下…
展开
-
52. N皇后 II
public int totalNQueens(int n) { if (n == 1) return 1; // 第i行的皇后放在那一列 int[] records = new int[n]; return process(records, n, 0); } private int process(int[] records, int n, int rowIdx) { if (rowIdx == n) {原创 2021-08-16 09:35:06 · 202 阅读 · 0 评论 -
Java实现lower_bound()和upper_bound()
lower_bound()函数lower_bound()在**[lo, hi)进行二分查找,返回大于或等于**target的第一个元素的位置。如果所有元素都小于target,则返回hi.private int lower_bound(int[] nums, int lo, int hi, int target) { while (lo < hi) { int mid = lo + (hi - lo) / 2; if (target &原创 2021-08-12 08:56:10 · 778 阅读 · 0 评论 -
中文数字转阿拉伯数字 数字转换
https://www.d5.nz/read/sfdlq/text-part0000_split_030.html Map<Character, Integer> chnUnitMap = new HashMap<>(); Map<Character, Integer> chnNumMap = new HashMap<>(); int[] value = {10, 100, 1000, 10000, 100000000}; bool原创 2021-01-17 16:26:22 · 577 阅读 · 0 评论 -
阿拉伯数字转中文数字 数字转换
https://www.d5.nz/read/sfdlq/text-part0000_split_029.html private char[] chnNumChar = {'零', '一', '二', '三', '四', '五', '六', '七', '八', '九'}; private String[] chnUnitSection = { "", "万", "亿", "万亿"}; private String[] chnUnitChar = { "", "十", "百", "千原创 2021-01-17 14:38:31 · 803 阅读 · 0 评论 -
合并k个有序数组
// 1,基于排序申请数组,在数组内进行排序// 2, 基于归并// 感觉空间复杂度太大public int[] mergeArrays(List<int[]> arrays) { if (arrays == null || arrays.size() == 0) return new int[0]; return mergeArrays(arrays, 0, arrays.size()-1); } private i原创 2021-01-16 15:02:37 · 439 阅读 · 0 评论 -
191. 位1的个数 剑指 Offer 15 二进制中1的个数
public int hammingWeight(int n) { int bits = 0; int mask = 1; for (int i = 0; i < 32; i++) { if ((n & mask) != 0) { bits++; } mask <<= 1; } return b原创 2021-01-14 10:48:32 · 77 阅读 · 0 评论 -
Longest Repeating Substring + 最长重复子串 + 后缀数组
public class LongestRepeatedSubstring { // Do not instantiate. private LongestRepeatedSubstring() { } /** * Returns the longest common string of the two specified strings. * * @param s one string * @param t the other str原创 2020-10-01 09:40:48 · 148 阅读 · 0 评论 -
641. 设计循环双端队列
class MyCircularDeque { int size = 0; int[] nums; int start = 0; int end = -1; /** Initialize your data structure here. Set the size of the deque to be k. */ public MyCircularDeque(int k) { nums = new int[k]; } /**原创 2020-09-29 13:44:08 · 70 阅读 · 0 评论 -
622. 设计循环队列
class MyCircularQueue { final int[] nums; int len = 0, front = 0, rear = -1; /** Initialize your data structure here. Set the size of the queue to be k. */ public MyCircularQueue(int k) { nums = new int[k]; } /** Insert原创 2020-09-29 13:12:29 · 102 阅读 · 0 评论 -
187. 重复的DNA序列
public List<String> findRepeatedDnaSequences(String s) { List<String> res = new ArrayList<>(); Set<String> resSet = new HashSet<>(); if (s.length() < 10) return res; Set<String> set = n原创 2020-09-27 09:41:15 · 62 阅读 · 0 评论 -
179. 最大数
public String largestNumber(int[] nums) { String[] strs = new String[nums.length]; for (int i = 0; i < nums.length; i++) { strs[i] = String.valueOf(nums[i]); } Arrays.sort(strs, (s1, s2)->((s2+s1).compare原创 2020-09-26 16:49:22 · 49 阅读 · 0 评论 -
174. 地下城游戏
public int calculateMinimumHP(int[][] dungeon) { int m = dungeon.length; int n = dungeon[0].length; int[][] dp = new int[m+1][n+1]; for (int i = 0; i <= m; i++) { Arrays.fill(dp[i], Integer.MAX_VALUE);原创 2020-09-26 16:13:46 · 75 阅读 · 0 评论 -
173. 二叉搜索树迭代器
class BSTIterator { Deque<TreeNode> stack; public BSTIterator(TreeNode root) { stack = new ArrayDeque<>(); leftInOrder(root); } private void leftInOrder(TreeNode node) { while (node != null) {原创 2020-09-26 15:26:52 · 48 阅读 · 0 评论 -
171. Excel表列序号
public int titleToNumber(String s) { int n = s.length(); int res = 0; for (int i = 0; i < n; i++) { int t = s.charAt(i) - 'A' + 1; res = res * 26 + t; } return res; }原创 2020-09-26 14:39:46 · 59 阅读 · 0 评论 -
168. Excel表列名称
public String convertToTitle(int n) { StringBuilder sb = new StringBuilder(); String s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; while (n != 0) { if (n % 26 == 0) { sb.append('Z'); n = n / 26 - 1;原创 2020-09-26 14:32:03 · 61 阅读 · 0 评论 -
166. 分数到小数
public String fractionToDecimal(int numerator, int denominator) { if (numerator == 0) { return "0"; } StringBuilder sb = new StringBuilder(); if (numerator < 0 ^ denominator < 0) { sb.append("-原创 2020-09-26 14:10:31 · 103 阅读 · 0 评论 -
152. 乘积最大子数组
public int maxProduct(int[] nums) { int n = nums.length; int[] maxF = new int[n]; int[] minF = new int[n]; System.arraycopy(nums, 0, maxF, 0, n); System.arraycopy(nums, 0, minF, 0, n); for (int i = 1; i <原创 2020-09-26 10:20:48 · 55 阅读 · 0 评论 -
151. 翻转字符串里的单词
public String reverseWords(String s) { String[] strs = s.split(" "); StringBuilder sb = new StringBuilder(); for (int i = 0; i < strs.length; i++) { String str = strs[i]; if (strs[i].length() == 0) cont原创 2020-09-26 09:38:53 · 75 阅读 · 0 评论 -
LeetCode 311 稀疏矩阵的乘法
public int[][] multiply(int[][] A, int[][] B) { int m = A.length; if (m == 0) return new int[0][]; int s1 = A[0].length; int s2 = B.length; if (s2 == 0) return new int[0][]; int n = B[0].len原创 2020-09-22 10:05:03 · 117 阅读 · 0 评论 -
406. 根据身高重建队列
public int[][] reconstructQueue(int[][] people) { Arrays.sort(people, (i1, i2) -> (i1[0] == i2[0] ? i1[1] - i2[1] : i2[0] - i1[0])); List<int[]> res = new LinkedList<>(); for (int[] p : people) { res.a原创 2020-09-16 14:11:32 · 63 阅读 · 0 评论 -
468. 验证IP地址
public String validIPAddress(String IP) { if (IP.chars().filter(ch -> ch == '.').count() == 3) { return validateIPv4(IP); } else if (IP.chars().filter(ch -> ch == ':').count() == 7) { return validateIP原创 2020-09-16 10:16:50 · 99 阅读 · 0 评论 -
135. 分发糖果
public int candy(int[] ratings) { int n = ratings.length; int[] left = new int[n]; int[] right = new int[n]; for (int i = 0; i < n; i++) { left[i] = 1; right[i] = 1; } for (int i原创 2020-09-15 20:14:57 · 59 阅读 · 0 评论 -
30. 串联所有单词的子串
public List<Integer> findSubstring(String s, String[] words) { List<Integer> res = new ArrayList<>(); Map<String, Integer> counts = new HashMap<>(); for (String word : words) { counts.put.原创 2020-09-10 16:03:50 · 72 阅读 · 0 评论 -
958. 二叉树的完全性检验 是否是完全二叉树
public boolean isCompleteTree(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>(); // 不能用ArrayDeque 会有null值检查 queue.offer(root); while (queue.peek() != null) { TreeNode curr = queue.poll(); que.原创 2020-09-07 23:10:08 · 75 阅读 · 0 评论 -
93. 复原IP地址
public List<String> restoreIpAddresses(String s) { List<String> res = new ArrayList<>(); backTrack(res, s, "", 0, 0); return res; } private void backTrack(List<String> res, String ip, String tmp,原创 2020-09-07 18:34:05 · 80 阅读 · 0 评论 -
32. 最长有效括号
public int longestValidParentheses(String s) { int n = s.length(); int maxLen = 0; Deque<Integer> stack = new ArrayDeque<>(); // s[-1] = ')' stack.push(-1); for (int i = 0; i < n; i++) {原创 2020-09-07 15:18:47 · 74 阅读 · 0 评论 -
132. 分割回文串 II
public int minCut(String s) { int n = s.length(); int[] dp = new int[n]; //dp[i]表示 以下标i结尾的子串,最少切割次数 // 初始化 for (int i = 0; i < n; i++) { dp[i] = i; } for (int i = 0; i < n; i++) {原创 2020-09-07 12:45:44 · 69 阅读 · 0 评论 -
679. 24 点游戏
public boolean judgePoint24(int[] nums) { List<Double> list = new ArrayList<>(); for (int i : nums) { list.add((double) i); } return dfs(list); } // 每次dfs都是选取两张牌 private boolean dfs(List&原创 2020-09-06 16:06:54 · 90 阅读 · 0 评论 -
1143. 最长公共子序列
public int longestCommonSubsequence(String text1, String text2) { int n1 = text1.length(); int n2 = text2.length(); int[][] dp = new int[2][n2+1]; for (int i = 1; i <= n1; i++) { for (int j = 1; j <= n2;原创 2020-09-06 09:35:33 · 58 阅读 · 0 评论 -
57. 插入区间
public int[][] insert(int[][] intervals, int[] newInterval) { List<int[]> res = new ArrayList<>(); int n = intervals.length; int i = 0; while (i < n && intervals[i][1] < newInterval[0]) {原创 2020-09-05 09:04:07 · 76 阅读 · 0 评论 -
239. 滑动窗口最大值
public int[] maxSlidingWindow(int[] nums, int k) { int n = nums.length; int[] res = new int[n-k+1]; int idx = 0; Deque<Integer> stack = new ArrayDeque<>(); for (int i = 0; i < n; i++) {原创 2020-09-04 22:51:35 · 80 阅读 · 0 评论 -
164. 最大间距
public int maximumGap(int[] nums) { int n = nums.length; if (n <= 1) return 0; int minVal = nums[0]; int maxVal = nums[0]; for (int i = 1; i < n; i++) { if (nums[i] > maxVal) maxVal = nums[i];原创 2020-09-04 17:22:58 · 57 阅读 · 0 评论 -
188. 买卖股票的最佳时机 IV
public int maxProfit(int k, int[] prices) { // dp[i][k][0] = max(dp[i-1][k][0], dp[i-1][k][1] + prices[i]); // dp[i][k][1] = max(dp[i-1][k][1], dp[i-1][k-1][0] - prices[i]); int n = prices.length; if (n <= 1) ret原创 2020-09-04 10:52:46 · 92 阅读 · 0 评论 -
172. 阶乘后的零
public int trailingZeroes(int n) { int zeroCnt = 0; long currMul = 5; while (n >= currMul) { zeroCnt += (n / currMul); currMul *= 5; } return zeroCnt; } ````原创 2020-09-04 09:49:03 · 60 阅读 · 0 评论 -
72. 编辑距离
public int minDistance(String word1, String word2) { int n1 = word1.length(); int n2 = word2.length(); int[][] dp = new int[n1+1][n2+1]; for (int i = 1; i <= n1; i++) { dp[i][0] = i; } for (原创 2020-08-27 09:42:35 · 61 阅读 · 0 评论 -
268. Missing Number
public int missingNumber(int[] nums) { int n = nums.length; int lo = 0, hi = nums.length-1; while (lo <= hi) { int mid = lo + (hi - lo) / 2; if(nums[mid] == mid) lo = mid + 1; else原创 2020-08-24 10:14:11 · 71 阅读 · 0 评论 -
83. 删除排序链表中的重复元素
public ListNode deleteDuplicates(ListNode head) { if (head == null || head.next == null) return head; ListNode prev = head; for (ListNode curr = head.next; curr != null; curr = curr.next) { if (curr.val == prev.val) {原创 2020-08-21 15:46:08 · 69 阅读 · 0 评论 -
10. 正则表达式匹配
https://leetcode-cn.com/problems/regular-expression-matching/solution/dong-tai-gui-hua-zen-yao-cong-0kai-shi-si-kao-da-b/p[j]表示p第j个字母(p.charAt(j)),s[i]表示s的第i个字母dp[i][j] 表示s的前i个字母与p的前j个字母是否匹配如果 p[j] == s[i] : dp[i][j] = dp[i-1][j-1];如果 p[j] == ‘.’ : dp原创 2020-08-17 22:24:44 · 107 阅读 · 1 评论 -
215. 数组中的第K个最大元素
堆或快排public int findKthLargest(int[] nums, int k) { int n = nums.length; if (n < k) return -1; for (int i = (k-2)/2; i >= 0; i--) { sink(nums, i, k-1); } for (int i = k; i < n; i++) {原创 2020-08-14 17:07:04 · 65 阅读 · 0 评论 -
240. 搜索二维矩阵 II
public boolean searchMatrix(int[][] matrix, int target) { if (matrix.length == 0) return false; int m = matrix.length; int n = matrix[0].length; for (int i = 0, j = n-1; i < m && j >= 0;) {原创 2020-08-11 20:41:55 · 56 阅读 · 0 评论