
算法
文章平均质量分 59
Darren i
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java版大顶堆的实现
堆的概念堆是一棵完全二叉树,一般使用数组来存储。通俗来讲堆其实就是利用数组来维护一个完全二叉树。按照堆的特点可以把堆分为大顶堆和小顶堆大顶堆:堆的每个结点的值都大于或等于其左右孩子结点的值小顶堆:堆的每个结点的值都小于或等于其左右孩子结点的值根据堆的概念(利用数组维护的完全二叉树),可以推导出:假设 节点A 在数组 tree 的索引为 i 则(1)A节点的左节点索引:leftIdx = (i+1)/2 -1(2)A节点的右节点索引:rightIdx = (i+1)/2(3)A的原创 2021-06-24 19:28:35 · 1904 阅读 · 0 评论 -
有序数组中查找第一个比target大的数
思路:二分法时间复杂度:O(logn)空间复杂度:O(1)代码:public class Solution{ public int search(int[] nums, int target){ int lf=0, rt=n.length-1; while(lf<=rt){ int mid = lf+(rt-lf)/2; if(n[mid]>t){ rt = mid-1;原创 2021-04-23 10:17:54 · 1571 阅读 · 0 评论 -
算法设计与分析:(二)动态规划
目录设计思想使用动态规划的必要条件适用动态规划算法解决的问题的特征:优化原则:动态规划的一般步骤设计思想动态规划算法适用于组合优化问题,通过划分子问题的边界,从子问题开始逐层向上求解,通过子问题之间的依赖关系进行推导计算,最大限度减少重复工作,提高算法效率。但需要较大的存储空间来存储子问题计算的中间结果。使用动态规划的必要条件使用动态规划的问题,必须满足优化原则适用动态规划算法解决的问题的特征:(1) 求解的问题是多阶段决策(优化)问题(2)求解的过程是多步判断,从小到大依次求解每个子问题原创 2021-01-15 17:02:42 · 2153 阅读 · 0 评论 -
算法设计与分析:(一)时间复杂度分析
数学基础设f和g是定义域为自然数集N上的函数存在正整数c、n,使0<=f(n)<=cg(n)成立,称f(n)的渐进上界是g(n),记作f(n)=O(g(n))存在正整数c、n,使0<=cg(n)<=f(n)成立,则称f(n)渐进下界是g(n),记作f(n)=Ω(g(n))若f(n)=O(g(n))且f(n)=Ω(g(n)),则称f(n)与g(n)同阶,记作f(n)=Θ(g(n))常见阶从大到小的顺序O(n) <O(nlogn)<O(n^2)<O(2原创 2021-01-15 15:44:25 · 3281 阅读 · 0 评论 -
快慢指针:141. 环形链表(判断是否存在环路)
题目描述给定一个链表,判断链表中是否有环题目链接141. 环形链表解题思路使用快慢指针(Floyd判圈算法):从链表的头部设置两个指针,p1的步长为1, p2的步长为2,同时向前走,如果p1和p2最终能够相遇,则说明链表是有环的。检测环的基本思想是非常简单的,可以类比成两个人在跑道上跑。只要有圈,跑的快的那个人就一定能够追上跑得慢的那个人。代码:public class Solution { public boolean hasCycle(ListNode head) {原创 2020-12-31 15:33:18 · 201 阅读 · 0 评论 -
双指针:88. 合并两个有序数组
题目链接88. 合并两个有序数组解题思路一. 合并数组后排序,时间复杂度为O((n+m)log(n+m))代码:快排详解class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { for(int i=m,j=0;i<m+n;i++,j++){ nums1[i] = nums2[j]; }原创 2020-12-30 23:46:12 · 251 阅读 · 0 评论 -
并集查经典(转发)
原文:https://blog.youkuaiyun.com/a2459956664/article/details/50614096首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判断它们是否连通,或者问你整幅图一共有几个连通分支,也就是被分成了几个互相独立的块。像畅通工程这题,问还需要修几条路...转载 2019-01-24 13:47:57 · 193 阅读 · 0 评论 -
快速排序算法思想及实现
简介快速排序是对冒泡排序的一种改进,是一种分治算法,时间复杂度为O(nlogn)基本思想先从数列中取出一个数作为基准数。分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。再对左右区间重复第二步,直到各区间只有一个数。Java实现代码import java.util.Arrays;public class Main { public static void main(String[] args){ //测试数据 int[]原创 2020-12-24 14:40:18 · 276 阅读 · 1 评论 -
单词拆分
作者:xiao_ben_zhu链接:https://leetcode-cn.com/problems/word-break/solution/shou-hui-tu-jie-san-chong-fang-fa-dfs-bfs-dong-tai/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中转载 2020-09-22 16:42:17 · 504 阅读 · 0 评论 -
分割回文串
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: “aab”输出:[ ["aa","b"], ["a","a","b"]]搜索问题主要使用回溯法。回溯法思考的步骤:1、画递归树;2、根据自己画的递归树编码。代码参考:public List<List<String>> partition(String s) { if(s.length() == 0)return res;原创 2020-09-20 09:58:35 · 203 阅读 · 0 评论 -
HDU1078(DFS+DP)
Problem DescptionFatMouse has stored some cheese in a city. The city can be considered as a square grid of dimension n: each grid location is labelled (p,q) where 0 <= p < n and 0 <= q <...原创 2019-02-26 20:59:04 · 134 阅读 · 0 评论 -
POJ3278(BFS入门)
Problem DescrptionFarmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a po...原创 2019-02-28 16:40:11 · 319 阅读 · 0 评论 -
HDU1505
Bob is a strategy game programming specialist. In his new city building game the gaming environment is as follows: a city is built up by areas, in which there are streets, trees,factories and building...原创 2019-03-05 16:37:39 · 254 阅读 · 0 评论 -
二叉树:HDU1754
很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。Input本题目包含多组测试,请处理到文件结束。在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=200000,0<M<5...原创 2019-05-26 15:51:55 · 177 阅读 · 0 评论