![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分治法
# 分治法
I am jack
go ahead
展开
-
分治法求两个有序数组的中位数(LeedCode4)
分治法求两个有序数组的中位数算法步骤(基本原理是获取第k小的数) 先取两个中间索引x_mid,y_mid; 下面来比较 如果x[x_mid]比较小,那么就看x_mid最大是第几小(记作m) ①m<k; 则把x_mid及以前的全部删除,同时变换k的值 同时如果也要把y_mid及右边的尽可能的删除 ②如果m==k 则把x_mid以前的全部删除并且保留x_mid 同时如果也要把y_mid及右边的尽可能的删除 同理如果y大也一样原创 2020-05-31 22:12:54 · 1681 阅读 · 3 评论 -
几何问题中的分治法
几何问题中的分治法1.最近对问题问题描述:设p1=(x1,y1),p2=(x2,y2),…,pn=(xn,yn)一共n个点构成点集S,最近点对问题就是找出集合中距离最近的两个点,严格来说最近点对可能多于一个,但我们简单起见只找出一对即可。算法思路:(1)划分:将集合S分成两个子集S1和S2,根据平衡子问题原则,每个子集中大约有n/2个点,设集合S的最近点对是pi与pj(1<=i,j<=n),则会出现三种情况。①pi在S1中,pj在S1中②pi在S2中,pj在S2中③pi在S原创 2020-05-26 15:17:45 · 596 阅读 · 0 评论 -
腾讯2020-05春招补录笔试(刷板问题)
腾讯2020-05春招补录笔试这个题可以按分治思想,把问题简化为找到最小值,分成两部分,在每个部分内继续找最小值划分首先看一下算法分析:我们有两种刷法,横着刷与竖着刷核心思想就是利用上面两种方法把最短的刷完递归①只利用横着刷把最短刷完然后递归为什么要全用横着刷而不是横竖混刷?因为如果第一次横着刷以后再竖着刷的话,接下来就是递归,如果在子问题中先横着刷的话那么还不如在上一次中直接横着再刷一道,这样并不会影响总次数。如果子问题竖着刷的话,接着递归在新的子问题中如果横着刷的话还不如在上一次的原创 2020-05-26 15:13:09 · 264 阅读 · 0 评论 -
最大子段和问题------dp与分治法
最大子段和问题------dp与分治法I.dp法dm[i]表示以nums[i]为右端点的最大子序和class Solution { public int maxSubArray(int[] nums) { int max; int []dm=new int[nums.length]; dm[0]=nums[0]; max=dm[0]; for(int i=1;i<nums.length;i++)原创 2020-05-22 12:43:03 · 208 阅读 · 0 评论 -
数字旋转方阵
数字旋转方阵import org.junit.Test;public class Test1 { //数字旋转方阵 @Test public void Test() { int data[][]=new int[6][6]; Full(6,data,0,1); for (int[] datum : data) { for (int i : datum) { System.ou原创 2020-05-22 09:20:50 · 794 阅读 · 0 评论 -
分治法实例
分治法实例1.基本思想(1)分解:将要求解的问题用若干较小的同类子问题(2)求解:当问题被划分得足够小的时候,用简单方法解决(3)合并:根据求解的问题,将子问题的接解逐层合并得到原问题的最终解2.实例视频教程上图有个小错误,选手二的第5天为5import org.junit.Test;public class Math { @Test public void Test() { Solution solution = new Solution(4);原创 2020-05-11 17:31:24 · 705 阅读 · 0 评论