算法
文章平均质量分 62
养兔兔也
这个作者很懒,什么都没留下…
展开
-
动态规划力扣java
区域和检索 - 数组不可变给定一个整数数组 nums,求出数组从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点。输入:[[[-2, 0, 3, -5, 2, -1]], [0, 2], [2, 5], [0, 5]]输出:[null, 1, -1, -3]要计算 sumRange(i,j),则需要计算数组 nums 在下标 jj 和下标i−1 的前缀和,然后计算两个前缀和的差。如果可以在初始化的时候计算出数组 nums 在每个下标处的前缀和,即可满足每次调用 sumRa.原创 2021-03-09 17:09:55 · 149 阅读 · 0 评论 -
贪心算法力扣简单题(java)
判断子序列给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。本题询问的是,ss 是否是 tt 的子序列,因此只要能找到任意一种 ss 在 tt 中出现的方式,即可认为 ss 是 tt 的子序列。而当我们从前往后匹配,可以发现每次贪心地匹配靠前的字符是最优决策。假定当前需要匹配字符 cc,而字符 cc 在 tt 中的位置 x_.原创 2021-03-07 17:13:02 · 422 阅读 · 1 评论 -
力扣位运算简单java
多数元素给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:[3,2,3]输出:3示例 2:输入:[2,2,1,1,1,2,2]输出:2位运算c++class Solution {public: int majorityElement(vector<int>& nums) { int res = 0; for(i.原创 2021-03-03 17:16:08 · 302 阅读 · 0 评论 -
蓄水池抽样
链表随机节点给定一个单链表,随机选择链表的一个节点,并返回相应的节点值。保证每个节点被选的概率一样。进阶:如果链表十分大且长度未知,如何解决这个问题?你能否使用常数级空间复杂度实现?示例:// 初始化一个单链表 [1,2,3].ListNode head = new ListNode(1);head.next = new ListNode(2);head.next.next = new ListNode(3);Solution solution = new Solution(head);.原创 2021-03-02 11:10:17 · 76 阅读 · 0 评论 -
力扣简单题链表(Java)
相交链表编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B .原创 2021-03-01 17:25:32 · 371 阅读 · 1 评论 -
力扣二叉树简单题集合(Java)
二叉树的直径给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 :给定二叉树1/ 2 3/ \4 5返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意:两结点之间的路径长度是以它们之间边的数目表示。class Solution { int count; public int diameterOfBinaryTree(TreeNode root) {.原创 2021-02-24 18:30:58 · 244 阅读 · 0 评论 -
剑指offer数学专题(java)版本
11.输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。示例1输入:10返回值::2如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三位变成0,它后面的两位0变成了1,而前面的1保持不变,因此得到的结果是1011.我们发现减1的结果是把最右边的一原创 2021-01-31 20:36:24 · 69 阅读 · 0 评论 -
递归剑指offer(递归)java版
8.一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。示例1输入:1返回值:1示例2输入:4返回值::5思路public int JumpFloor(int target) { if(target <= 0) return 0; if(target == 1) return 1; int count = JumpFloor(target -1) + JumpFloor(原创 2021-01-26 21:23:24 · 57 阅读 · 0 评论 -
剑指offer数组专题 (java)
1.在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例1输入:7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]返回值:true...原创 2021-01-25 21:44:24 · 65 阅读 · 0 评论 -
剑指offer字符串专题(java)
2.替换空格请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 public String replaceSpace(StringBuffer str) { return str.toString().replace(" ","%20"); } public String replaceSpace(StringBuffer str) { StringB原创 2021-01-19 18:33:12 · 72 阅读 · 0 评论 -
位运算剑指offer经典题
40.一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。数组里包含了两个只出现一次的数字,那么所有数字依次异或的结果就是这两个只出现一次的数字的异或结果。我们要想办法利用这个异或结果,把数组分为两个子数组,一个子数组包含一个只出现一次的数字,另一个数组包含另一个只出现一次的数字。由于这两个只出现一次的数字肯定不相等,那么这个异或结果肯定不为0,也就是说在这个结果数字的二进制表示中至少就有一位为1。我们在结果数字中找到第一个为1的位的位置,记为第N位。现在我们以第N原创 2021-01-15 17:50:51 · 58 阅读 · 0 评论 -
动态规划剑指offer
30.输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).示例1输入[1,-2,3,10,-4,7,2,-5]返回值18输入的数组为{1,-2,3,10,—4,7,2,一5},和最大的子数组为{3,10,一4,7,2},因此输出为该子数组的和 18。//思路 public int FindGreatestSumOfSubArray(int[] array) { if(array.leng原创 2021-01-15 12:21:57 · 64 阅读 · 0 评论 -
剑指offer链表专题“(java)
3.输入一个链表,按链表从尾到头的顺序返回一个ArrayList。示例1输入{67,0,24,58}返回值[58,24,0,67]递归方法public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> res = new ArrayList<>(); if(原创 2021-01-04 16:11:34 · 65 阅读 · 0 评论 -
剑指offer二叉树专题
df原创 2020-12-31 14:50:56 · 77 阅读 · 1 评论 -
力扣哈希专题
1.设计哈希表设置哈希集合class MyHashSet { private Bucket[] bucketArray; private int keyRange; /** Initialize your data structure here. */ public MyHashSet() { this.keyRange = 769; this.bucketArray = new Bucket[this.keyRange]; for (int i = 0; i原创 2020-12-04 08:39:48 · 187 阅读 · 0 评论 -
力扣字符串专题
1.最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”class Solution { public String longestCommonPrefix(String[] strs) { if(strs.length ==0) return ""; String pub = strs[0]; for(int原创 2020-12-02 15:22:07 · 391 阅读 · 1 评论 -
力扣数组专题
1.移动零移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]双指针法快慢指针class Solution { public void moveZeroes(int[] nums) { int n = nums.length, left = 0, right = 0; while (right < n) {原创 2020-12-01 16:26:12 · 252 阅读 · 0 评论 -
力扣链表题
1.构造链表设计链表public class ListNode { int val; ListNode next; ListNode(int x) { val = x; }}class MyLinkedList { int size; ListNode head; // sentinel node as pseudo-head public MyLinkedList() { size = 0; head = new ListNode(0); }原创 2020-11-20 14:48:59 · 223 阅读 · 0 评论 -
二叉树(二叉搜索树)基本算法题
1.二叉树前序遍历//递归操作class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); preorder(root, res); return res; } public void preorder(TreeNode原创 2020-11-12 15:19:04 · 315 阅读 · 2 评论
分享