leetcode
冲冲冲冲冲冲!!!
互联网行业的农民工,已润去ic了
展开
-
leetcode每日一题:摩尔投票
思路:抓住重点:出现超过一半的元素,可以让两两不一样的元素对消,剩下的一个或多个相同的元素就是所要返回的元素了。原创 2022-06-08 13:22:19 · 69 阅读 · 0 评论 -
翻转链表进阶:k个一组翻转链表(使用迭代的方式)
别被红色的困难两个字吓到了,其实滤清思路后你会觉得真的不难思路如下:例如:可以使用迭代的方式:第一次迭代:21345第二次迭代:23145这一组就翻转完毕,因为剩余节点个数小于k,则这即要返回的结果;拓展一下:head = [1,2,3,4,5,6,7,8]第一次迭代:21345678第二次迭代:32145678第一组翻转完毕;第一次迭代:32154678第二次迭代:32165478剩余节点个数小于k,则这即为要返回的结果;代码实现:/** * Definition fo.原创 2021-08-25 05:01:14 · 87 阅读 · 0 评论 -
贪心算法(leetcode152. 乘积最大子数组)
看到这道题,相信不少人第一反应是动态规划,考虑到负数的出现,偶数个负数相乘必能得到正数,所以要定义两个dp数组,一个保存最小值一个保存最大值,即: public int maxProduct(int[] nums) { /*动态规划*/ int n = nums.length; int max = nums[0],min = nums[0],res = nums[0]; for(int i=1;i<n;i++){ .原创 2021-08-25 04:40:15 · 126 阅读 · 0 评论 -
详细分析二分查找算法
假设一张0.001cm的纸可以无限次数折叠,那它折叠多少次的高度可以从地面到达月球?答案是log(3.510^(1000001000*100/0.001)),结果约等于45。这结果是否与你的感觉有所差距?因此,可想而知二分查找算法中,折半查找的思路的效率有多高了。现在我们就来详细讨论下二分查找这个这么牛逼的算法。算法具体思路现在给出一个排序的数组,例如是{1,2,3,4,5,6,7,8,9},如何查找3?class Solution { public int minArray(int[]原创 2021-06-15 18:56:37 · 117 阅读 · 2 评论 -
leetcode经典动态规划题目:518、零钱兑换
动态规划解题思路:1、初始化 dp[0]=1;2、遍历coins,对于其中的每个元素coin,进行如下操作:3、遍历 i 从 coin 到amount,将 dp[i−coin] 的值加到dp[i]。最终得到 dp[amount] 的值即为答案。对应的代码实现:class Solution { public int change(int amount, int[] coins) { int[] dp = new int[amount+1]; dp[0] =.原创 2021-06-10 13:33:38 · 84 阅读 · 0 评论 -
经典题目:反转链表(leetcode剑指offer24)
双指针:定义两个指针: prev 和 head ;prev 在前 head 在后。每次让 prev 的 next 指向 head ,实现一次局部反转局部反转完成之后, prev 和 head 同时往前移动一个位置循环上述过程,直至 prev 到达链表尾部提交代码:class Solution { public ListNode reverseList(ListNode head) { ListNode prev = null; while(head!=n.原创 2021-06-06 19:26:28 · 100 阅读 · 0 评论 -
leetcode每日一题(203.移除链表的元素)
思路:Java中的链表节点的后继节点是它内部定义的一个属性,所以,要删除它的后继节点,只需把节点的后继节点属性赋值为后继节点的后继节点即可;如删除list的下一个节点:list.next = list.next.next;//注意:list.next!=null考虑到返回值,可以使用浅拷贝的方式,即list=head,然后在list上操作,把head作为返回值提交代码如下:class Solution { public ListNode removeElements(ListNode .原创 2021-06-06 19:11:40 · 85 阅读 · 0 评论 -
leetcode每日一题(475.供暖器)
题目:遇到无保持原数组元素要求和没时间复杂度要求的问题可以尝试排序寻找思路:Arrays.sort(heaters);Arrays.sort(houses);一直找到处于房屋右侧的供暖器:while(i<heaters.length&&heaters[i]<house) i++;若遇到原房屋的最后一个房屋中含有供暖期,直接返回结果:else if(i==heaters.length) return Math.max(radius,houses[houses.l原创 2021-06-06 18:57:08 · 123 阅读 · 0 评论 -
每日一题(一和零),转化为二维动态规划问题题解
题目:思路:把总共的 0 和 1 的个数视为背包的容量,每一个字符串视为装进背包的物品。这道题就可以使用 0-1 背包问题的思路完成,这里的目标值是能放进背包的字符串的数量。即物品一个一个的尝试,决定选与不选,得出状态转移方程:不选择当前字符串:dp[j][k] = dp[j][k]要选择当前字符串:dp[j][k] = dp[j−zero][k−one] + 1二者取最大值。提交代码:class Solution { public int findMaxForm(String[]原创 2021-06-06 18:33:36 · 67 阅读 · 0 评论 -
动态规划
例题1:爬楼梯:解题思路:最后一步可能走了一阶或者两阶,两种情况,所以很容易得出递归方程。算法优化:可以采用数组的方式模拟迭代过程,即dp[i] = dp[i-1]+dp[i-2]代码如下:class Solution { public int climbStairs(int n) { if(n==1) return 1; int[] dp = new int[n]; dp[0] = 1; dp[1] = 2;原创 2021-04-29 14:36:01 · 89 阅读 · 0 评论 -
leetcode官网收藏的帖子的入口
错误操作:打开后:????正确操作:原创 2021-04-26 00:04:38 · 191 阅读 · 0 评论