首页 文章 精选 留言 我的

精选列表

搜索[c 14],共10000篇文章
优秀的个人博客,低调大师

leetcode算法题解(Java版)-14-第k小数问题

一、第k小数问题 题目描述 There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)). 思路 题目要求在O(log(m+n))时间内完成,可以转换为找到假设两个数组合并后的第(m+n)/2小的数。 这里先忽略奇偶问题,具体实现代码中会有不同。先假设A和B中的数都大于k/2,比较A[k/2-1]和B[k/2-1](减1是因为数组下标从零开始)如果A[k/2-1] 代码 public class Solution { public double findMedianSortedArrays(int A[], int B[]) { //奇偶数不会有影响,最后中位数就是平均值 int m = A.length,n = B.length; int l = (m+n+1)/2; int r = (m+n+2)/2; return (findKthNum(A,B,0,0,l)+findKthNum(A,B,0,0,r))/2.0; } private double findKthNum(int [] A,int [] B,int Astart,int Bstart,int k){ int lenA = A.length; int lenB = B.length; if(Astart>=lenA){ return B[Bstart+k-1]; } if(Bstart>=lenB){ return A[Astart+k-1]; } if(k==1){ return Math.min(A[Astart],B[Bstart]); } int minA = Integer.MAX_VALUE; int minB = Integer.MAX_VALUE; if(Astart+k/2-1<A.length){ //如果这里超过了A数组的范围,那就说明A中有将A、B合并后一半以上的 //数,也就是说中位数肯定在A中。那后面的minB<minA(MAX_VALUE),就会成立,从而舍弃B中的前一些无关的数 minA = A[Astart+k/2-1]; } if(Bstart+k/2-1<B.length){ minB = B[Bstart+k/2-1]; } if(minA<minB){ return findKthNum(A,B,Astart+k/2,Bstart,k-k/2); } else{ return findKthNum(A,B,Astart,Bstart+k/2,k-k/2); } } } 二、map映射 题目描述 Given an array of integers, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based. You may assume that each input would have exactly one solution. Input: numbers={2, 7, 11, 15}, target=9Output: index1=1, index2=2 思路 给一列数,给一个目标值,找出数列中两个数和为这个值的下标。因为数没有排序,可以考虑用map来构建数值和下标的映射,更狠一点,在遍历数组的同时,用map构建目标值减去当前这个数的值与当前下标的映射,然后对每一个遍历到的数判断是否已存在在map中。 代码 import java.util.HashMap; public class Solution { public int[] twoSum(int[] numbers, int target) { int n = numbers.length; int [] res = new int [2]; HashMap<Integer,Integer> map = new HashMap<Integer,Integer>(); for(int i=0 ;i<n;i++){ if(map.containsKey(numbers[i])){ res[0]=map.get(numbers[i])+1; res[1]=i+1; break; } else{ map.put(target-numbers[i],i); } } return res; } } 三、动态规划 题目描述 You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? 思路 题目提示了用动态规划来解,那自然想到从step 1,2,3,.。于是慢慢推了看看,看是否能得到状态转移方程。写了几个,发现:dp[i]=dp[i-1]+dp[i-2]; 代码 public class Solution { public int climbStairs(int n) { int [] dp = new int[n+2]; dp[1]=1; dp[2]=2; for(int i=3;i<=n;i++){ dp[i]=dp[i-1]+dp[i-2]; } return dp[n]; } } //优化一下空间复杂度 public class Solution { public int climbStairs(int n) { if(n<=2){ return n; } int one_step_before=2; int two_step_before=1; for(int i=3;i<=n;i++){ int cur = one_step_before+two_step_before; two_step_before = one_step_before; one_step_before = cur; } return one_step_before; } }

优秀的个人博客,低调大师

阿里开源了14个核心技术,你了解哪些?

在开源中国举行的“2017年度最受欢迎中国开源软件Top20”的评选中,阿里巴巴占据五席位。 其实,阿里巴巴并没有开源项目的KPI考核,各个团队都是发自内心地将踩过的坑和总结的经验融入到开源项目中,供业界所有人使用,希望帮助他人解决问题。这正是社区一致的开源精神,大家都可以站在巨人的肩膀上,每个人都可以既是老师又是学生,这或许可以解释为什么IT技术的发展能如此充满活力。 本文总结整理了2017年阿里巴巴九个重要的新开源项目和在开源中国评选中五个备受欢迎的项目,希望能对大家有所帮助。 构建高性能的分布式系统 我们见证了从大型机到分布式系统的趋势转变。大型机部署简单,无需多个节点配置,但是售价高、维护困难、单点依赖较高;而小型机组建的分布式系统则在降低成本的同时提高整体的并发量、扩展性和可靠性。相信不少人都听说过数据库连接池 Druid,js

优秀的个人博客,低调大师

Android GIS开发系列-- 入门季(14)FeatureLayer之范围查询

Android GIS开发系列-- 入门季(5),这篇文章中,我们知道如何去查找要素。现在有一个需求,查找某点5000米范围的要素,那如何来做呢?首先我们需要在地图上画个5000米半径的圆,然后根据QueryParameters来查询相关要素。具体如下: 一、画个5000米半径的圆 1.确定中心点:centerPoint 2.半径为5000 3.将一个圆分为120个点(当然可以细分更多),比如第一个点角度为0,求出sin与cos值,再分别求出经度与纬度: 纬度= 中心点的纬度+半径*cos值*每米的纬度偏移量 经度= 中心点的经度+半径*sin值*每米的经度偏移量 相关代码如下 : View Code 将上面的Polygon添加到GraphicsLayer中: SimpleFillSymbol fillSymbol = new SimpleFillSymbol(Color.parseColor("#88ff0000")); fillSymbol.setOutline(new SimpleLineSymbol(Color.TRANSPARENT, 0)); Graphic g = new Graphic(polygon, fillSymbol); mLayer.addGraphic(g); 效果如下: 分别计算polygon的面积与长度: double area = GeometryEngine.geodesicArea(polygon, SpatialReference.create(SpatialReference.WKID_WGS84), new AreaUnit(AreaUnit.Code.SQUARE_METER)); Log.e("huang", "area==="+area); double length = GeometryEngine.geodesicLength(polygon, SpatialReference.create(SpatialReference.WKID_WGS84), new LinearUnit(LinearUnit.Code.METER)); Log.e("huang", "area==="+length); 结果值为与实际计算值有偏差,但偏差不是很大。 //面积:78128662.10079278 //长度:31343.779712156855 二、通过圆polygon来查询FeatureLayer在此范围内的要素 private void queryFeature(Geometry geometry) { try { QueryParameters args = new QueryParameters(); args.setReturnGeometry(true);// 是否返回Geometry args.setGeometry(geometry); // 查询范围面 args.setInSpatialReference(SpatialReference .create(SpatialReference.WKID_WGS84)); args.setSpatialRelationship(SpatialRelationship.WITHIN); //获取查询结果result Future<FeatureResult> result = featureLayer.getFeatureTable() .queryFeatures(args, null); } catch (Exception e) { e.printStackTrace(); } } 三、思考 其实FeatureLayer的getFeatureIDs(float x, float y, int tolerance)与 getFeatureIDs(float x, float y, int tolerance, int numberOfResults)、 GraphicsLayer中的getGraphicIDs(float x, float y, int tolerance)与 getGraphicIDs(float x, float y, int tolerance, int numberOfResults) 这几个查询方法也是通过范围去查询,只不过x,y是屏幕坐标,相当于中心坐标,而tolerance相当于半径,范围的大小由tolerance决定。那5dp的查找范围相当于多少范围呢? 可以获取当前地图的比例尺*查找半径获取到。 没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。 本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7752021.html ,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

用户登录
用户注册