![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
手抓粑粑
648731467@.com
展开
-
Leetcode 189. 旋转数组(二次反转,环状替换(双临时变量))
旋转数组给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3,4,5] 向右旋转 3 步: [5,6,7,1,2,3,4]public class Solution { public void rotate(int[] nums, int k) { .原创 2020-09-13 20:11:32 · 121 阅读 · 0 评论 -
Leetcode 198. 打家劫舍(动态规划,稍有不同的我的解法)
打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1: 输入:[1,2,3,1] 输出:4 解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。示例.原创 2020-09-13 17:47:36 · 51 阅读 · 0 评论 -
Leetcode 326. 3的幂(求余数也可以用上限)
给定一个整数,写一个函数来判断它是否是 3 的幂次方。public class Solution { public boolean isPowerOfThree(int n) { return n > 0 && 1162261467 % n == 0; }}总结可以用int所能容纳的最大3次幂反求余数,为0则能被整除...原创 2020-09-13 16:16:31 · 86 阅读 · 0 评论 -
Leetcode 350. 两个数组的交集 II
两个数组的交集 II给定两个数组,编写一个函数来计算它们的交集。示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2]示例 2: 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。我们可以不考虑输出结果的顺序。进阶:如果给定的数组已经排好序呢?你将如何优化你的算法?如果 nums1 的大小比 nums2 小很.原创 2020-09-13 14:04:38 · 78 阅读 · 0 评论 -
Leetcode 101. 对称二叉树(双指针)
对称二叉树给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1/ 2 2/ \ / 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:1/ 2 2\ 3 3进阶:你可以运用递归和迭代两种方法解决这个问题吗?/** * Definition for a binary tree node. * public class TreeNode { * int v.原创 2020-09-10 17:28:55 · 151 阅读 · 0 评论 -
Leetcode 155. 最小栈(Stack类的使用练习)
最小栈设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。class MinStack { /** initialize your data structure here. */ Stack<Integer> stack; Stack<Integer> mi.原创 2020-09-10 16:41:37 · 160 阅读 · 0 评论 -
Leetcode 371. 不用+的两整数之和(与,异或,某些数字需要用两次,再=覆盖)
两整数之和不使用运算符 + 和 - ,计算两整数 a 、b 之和。示例 1: 输入: a = 1, b = 2 输出: 3示例 2: 输入: a = -2, b = 3 输出: 1class Solution { public int getSum(int a, int b) { int carry = a & b; int sumNoCarry = a ^ b; int tem.原创 2020-09-10 15:57:00 · 131 阅读 · 0 评论 -
Leetcode 268. 缺失数字(有效利用异或和)
缺失数字给定一个包含 0, 1, 2, …, n 中 n 个数的序列,找出 0 … n 中没有出现在序列中的那个数。示例 1: 输入: [3,0,1] 输出: 2示例 2: 输入: [9,6,4,2,3,5,7,0,1] 输出: 8class Solution { public int missingNumber(int[] nums) { int numsOR = 0; for(int i = 0;i<nums.length;i++){.原创 2020-09-10 14:34:22 · 69 阅读 · 0 评论 -
Leetcode 202. 快乐数(找规律注意回环)
快乐数编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例:输入:19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 02 = 1class Solutio.原创 2020-09-10 13:40:26 · 161 阅读 · 1 评论 -
Leetcode 13. 罗马数字转整数(关于枚举)
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情原创 2020-09-09 17:38:38 · 94 阅读 · 0 评论 -
Leetcode 面试简单题知识点
Leetcode-412-Fizz Buzz :判断时可分开判断,内部使用拼接字符串,这样可以避免判断条件爆炸。这是建立在满足两个条件跟满足一个条件有关系的情况下,如果题目要求不输出Fizz Buzz 输出别的,就不好使了。Leetcode-169-多数元素 : 可用投票法,这是建立在只有一个满足条件的角色下才能实现。有趣的是,本题还可用抽样的方法,由于是概率相关的特解,很难推广。Leetcode-122-买卖股票的最佳时机 II : 就是直接求最大利润,没有别的要求,所以直接判断是上斜线还是原创 2020-09-09 17:20:08 · 81 阅读 · 0 评论 -
Leetcode 104. 二叉树的最大深度
二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。/** * Definition for a binary tree node. * public class TreeNode { * int val; * .原创 2020-09-08 15:39:18 · 74 阅读 · 0 评论 -
Leetcode 347. 前 K 个高频元素(堆实现)
前 K 个高频元素(堆实现)给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]class Solution { public int[] topKFrequent(int[] nums, int k) { Map<Integer,Integer> numCountMap = new .原创 2020-09-08 13:21:59 · 171 阅读 · 2 评论 -
HashMap常用API及注意事项
map.clear();map.size();map.isEmptymap.containsKey();判断map.containsValue();map.entrySet();用来遍历每一对KVmap.get(key);map.put(key,value);map.putAll(otherMap);map.remove(key);原创 2020-09-08 13:01:47 · 1708 阅读 · 0 评论 -
堆排序(几个重点)
https://blog.csdn.net/touch_2011/article/details/6767673原创 2020-09-07 11:49:57 · 218 阅读 · 0 评论 -
无需第三者的交换
a[i]=a[i]+a[index];a[index]=a[i]-a[index];a[i]=a[i]-a[index];无需第三者的交换。原创 2020-09-07 11:26:35 · 58 阅读 · 0 评论 -
Leetcode 78. 子集(回溯法)
子集(回溯法)class Solution { List<List<Integer>> output = new ArrayList(); List<Integer> sub = new ArrayList(); int n,k = 0; public List<List<Integer>> subsets(int[] nums) { n = nums.length; for(k.原创 2020-09-06 16:07:11 · 105 阅读 · 0 评论 -
leetcode 78. 子集(注意浅复制)
子集给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]class Solution { public List<List<Integer>> subsets(int[] nums) { .原创 2020-09-05 20:56:42 · 74 阅读 · 0 评论 -
Leetcode 54. 螺旋矩阵(别用dfs)
螺旋矩阵给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,3,6,9,8,7,4,5]示例 2: 输入: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] 输出: [1,2,3,4,8,12,11,10,9,5,6,7]class ..原创 2020-09-05 15:45:57 · 90 阅读 · 0 评论 -
面试题 04.02. 最小高度树
面试题 04.02. 最小高度树给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。示例: 给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5 /** * Definition for a binary tree node. * public class TreeN原创 2020-09-04 15:39:56 · 58 阅读 · 0 评论 -
位运算技巧集
位运算技巧集一般用0xfffffff这种16位数,代替32位二进制数;Java中的幂指数运算不能是^ ,这个符号代表的是异或运算符;&|~^ 与或非异或两个大于号 向右移位运算一般可以通过先将需要处理的数字变为二进制数,在观察数字,运算和最终结果之间和关系。如果需要处理和数字有两个,可以观察两个数字的组合又什么规律。比如,通过拼接,异或,与运算得出某个数,推导这个数和最终结果有什么关系。for(i:=31;i>=0;i--){ 1<<i;}0010000原创 2020-09-04 14:03:21 · 214 阅读 · 0 评论 -
Leetcode 179. 最大数(大量注意事项)
最大数给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。示例 1: 输入: [10,2] 输出: 210示例 2: 输入: [3,30,34,5,9] 输出: 9534330说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。import java.util.Arrays;import java.util.Comparator;class Solution { public String largestNumber(int[] nums) { .原创 2020-09-03 18:46:56 · 115 阅读 · 0 评论 -
Leetcode 1114. 按序打印(并发)
按序打印我们提供了一个类:public class Foo { public void first() { print("first"); } public void second() { print("second"); } public void third() { print("third"); }}三个不同的线程将会共用一个 Foo 实例。线程 A 将会调用 first() 方法线程 B 将会调用 second() 方法线程 C 将会调用 third() 方法请设计.原创 2020-09-01 20:14:17 · 332 阅读 · 0 评论 -
Leetcode 121. 买卖股票的最佳时机
买卖股票的最佳时机给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买.原创 2020-09-01 16:41:59 · 62 阅读 · 0 评论 -
Leetcode 338. 比特位计数
比特位计数给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1: 输入: 2 输出: [0,1,1]示例 2: 输入: 5 输出: [0,1,1,2,1,2]进阶:给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但你可以在线性时间O(n)内用一趟扫描做到吗?要求算法的空间复杂度为O(n)。你能进一步完善解法吗?要求在C++或任何其他语言中不使用任何内置函数(如 C++ .原创 2020-09-01 15:42:03 · 87 阅读 · 0 评论 -
Leetcode 746. 使用最小花费爬楼梯
使用最小花费爬楼梯数组的每个索引作为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 costi。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。示例 1: 输入: cost = [10, 15, 20] 输出: 15 解释: 最低花费是从cost[1]开始,然后走两步即可到阶梯顶,一共花费15。示例 2: 输入: cost = [1, 100,.原创 2020-09-01 14:50:28 · 105 阅读 · 1 评论 -
Leetcode 面试题 08.01. 三步问题
面试题 08.01. 三步问题三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。示例1: 输入:n = 3 输出:4 说明: 有四种走法 示例2: 输入:n = 5 输出:13 提示:n范围在[1, 1000000]之间class Solution { public int waysToStep(int n) { if(n == 1)原创 2020-08-31 15:56:11 · 127 阅读 · 0 评论 -
Leetcode 53. 最大子序和
不是从前往后,而应该从后往前,从前往后重叠区域找起来很费劲。原创 2020-08-31 15:08:03 · 55 阅读 · 0 评论 -
Leetcode 53最大子序和
最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。暴力解法O(n^3)class Solution { public int maxSubArray(int[] nums) { int m..原创 2020-08-31 11:38:35 · 81 阅读 · 0 评论 -
Leetcode19(双指针法)删除链表的倒数第N个节点
##(双指针法)删除链表的倒数第N个节点给定一个链表,删除b链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?/** * Definition for singly-linked list. * public class ListNode {原创 2020-08-31 10:27:01 · 126 阅读 · 0 评论 -
leetcode 557. 反转字符串中的单词 III
反转字符串leetcode 557. 反转字符串中的单词 III给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例:输入:"Let's take LeetCode contest"输出:"s'teL ekat edoCteeL tsetnoc"class Solution { public String reverseWords(String s) { int start = 0; int end = 0;原创 2020-08-30 17:09:50 · 80 阅读 · 0 评论