首页 文章 精选 留言 我的

精选列表

搜索[软件包更新],共10000篇文章
优秀的个人博客,低调大师

算法之搜索(Java版)-持续更新补充

一、顺序查找 顺序查找对序列本身没有要求(比如不需要是已经排序好的),也不仅限于数字、字符,也可以用于前缀,对象信息的关键信息的匹配(比如查找指定id的相应信息)。衡量查找性能的一个指标是————ASL(Average Search Length),ASL=Pi乘Ci,Pi是查找第i个元素的概率,Ci是找到第i个已经比较过次数。哨兵方式的顺序查找相比较基础的顺序查找在循环的比较部分减少了一般。 //1. 顺序查找 public class SequentialSearch { private int[] array; public SequentialSearch(int[] array) { this.array = array; } public int search(int key) { for(int i = 0; i < array.length; i++) { if(array[i] == key) { return i; } } return -1; } } //2. 哨兵方式顺序查找 public class Search2 { private int[] array; public Search2(int[] array) { this.array = array; } public int search(int key) { if(key == array[0]) { return 0; } int temp = array[0]; array[0] = key; int index = array.length-1; while(array[index] != key) { index--; } array[0] = temp; if(index == 0) { return -1; }else { return index; } } } 二、二分查找 如果是顺序查找,7个数最多可能会比较7次,但用二分查找,最多只要3次就能OK。时间复杂度是O(logn)(底数为2)。 二分查找的优化————插值查找 如果数据范围是1~100000,让你找10,那么就不一定要从中间找起了。可以三分之一,四分之一处查找,比如1~10,待查为3,那可以从前面三分之一为划分点。对于要查找的位置有个精确的计算公式P=low+(key-a[low])/(a[high]-a[low])*(high-low) //1. 二分查找递归与非递归的实现 public class BinarySearch { private int[] array; public BinarySearch(int[] array) { this.array = array; } public int searchRecursion(int target) { if(array == null) { return -1; } return searchRecursion(target, 0, array.length - 1); } public int search(int target) { if(array == null) { return -1; } int start = 0; int end = array.length - 1; while(start <= end) { int mid = start + (end - start) / 2; if(array[mid] == target) { return mid; }else if(target < array[mid]) { end = mid - 1; }else { start = mid + 1; } } return -1; } private int searchRecursion(int target, int start, int end) { if(start > end) { return -1; } int mid = start + (end - start) / 2; if(array[mid] == target) { return mid; }else if(array[mid] < target) { return searchRecursion(target, mid + 1, end); }else { return searchRecursion(target, start, mid -1); } } } //2. 二分插入排序 public class BinaryInsertSort { private int[] array; public BinaryInsertSort(int[] array) { this.array = array; } public void sort() { int length = array.length; for(int i = 1; i < length; i++) { int temp = array[i]; int insertIndex = binarySearch(i - 1, temp); if(insertIndex != i) { for(int j = i; j > insertIndex; j--) { array[j] = array[j - 1]; } array[insertIndex] = temp; } } } public void print() { for(int i = 0; i < array.length; i++) { System.out.println(array[i]); } } private int binarySearch(int end, int target) { int start = 0; int mid = -1; while(start <= end) { mid = start + (end - start) / 2; if(array[mid] > target) { end = mid - 1; }else { //如果相等,也插入到后面 start = mid + 1; } } return start; } } 三、杨氏矩阵的的查找 杨氏矩阵就是行列递增的矩阵。 杨氏矩阵的操作 插入。插入一个数,需要移动其他元素 删除。给定x,y坐标,删除那个数,伴随其他元素移动,怎样移动操作最少? 查找t是否存在于矩阵中。这也是这篇博客里所要关注的。 返回第k大的数。涉及到堆查找,后续博客再细说。 关于查找t是否存在于矩阵,书中给了几种实现的方法: 递归实现和非递归实现优化: 每次不都从每行的第一个数开始查找,左右上下进行比较然后查找。 分治法。杨氏矩阵行列是递增的,那么对角线也是递增的,可以利用对角线划分的区域来缩小要查找数的范围。(实现略) 定位查找法。先定位到第一行最右的数,然后只需要往下走,往左走两种操作即可,相比方法2省掉了往右走。 public class YoungSearch { private int[][] array; public YoungSearch(int[][] array) { this.array = array; } //1.递归实现 public boolean recursionSearch(int x, int y, int target) { if(x == array.length || y == array[0].length) { return false; } if(target < array[x][y]) { return false; } if(target == array[x][y]) { System.out.println(String.format("x: %d, y: %d", x, y)); return true; } return recursionSearch(x + 1, y, target) || recursionSearch(x, y + 1, target); } //非递归实现 public boolean search(int target) { for(int i = 0; i < array.length; i++) { for(int j = 0; j < array[0].length && target >= array[i][j]; j++) { if(target == array[i][j]) { System.out.println(String.format("x: %d y: %d", i, j)); return true; } } } return false; } //2.简单优化(向左/右/下走) public boolean search2(int target) { int width = array[0].length; int height = array.length; if(target >= array[0][0]) { int i = 0; for(; i < width && target >= array[0][i]; i++) { if(target == array[0][i]) { System.out.println(String.format("x: %d, y: %d", 0, i)); return true; } } if(i > width - 1) { i--; } //循环向下查找 for(int j = 1; j < height; j++) { if(target == array[j][i]) { System.out.println(String.format("x: %d, y: %d", j, i)); return true; }else if(target < array[j][i]) { for(; i >= 0; i--) { if(target == array[j][i]) { System.out.println(String.format("x: %d, y: %d", j, i)); return true; }else if(target > array[j][i]) { break; } } if(i < 0) { i++; } }else if(target > array[j][i]) { for(; i < width; i++) { if(target == array[j][i]){ System.out.println(String.format("x: %d, y: %d", j, i)); return true; }else if(target < array[j][i]) { break; } } if(i > width - 1) { i--; } } } } return false; } //3.进一步优化(从第一行最右边的数开始,只需要向下和向左两个操作) public boolean search3(int target) { int i = 0; int j = array[0].length - 1; int temp = array[i][j]; while(true) { if(target == temp) { System.out.println(String.format("x: %d, y: %d", i, j)); return true; }else if(j > 0 && target < temp){ temp = array[i][--j]; }else if(i < array.length - 1 && target > temp) { temp = array[++i][j]; }else { return false; } } } } 四、分块查找 对于待查找的数据列表来说,如果元素变动很少,那么可以先进行排序再查找。但如果这个数据经常需要添加元素,那么每次查找前都需要排序,这并不是一个好的选择。就有了分块查找,这个概念再学数据库的时候听过。分块查找里有索引表和分块这两个概念。索引表就是帮助分块查找的一个分块依据,就是一个数组,用来存储每块最大的存储值(范围上限);分块就是通过索引表把数据分为几块。原理:当需要增加一个元素的时候,先根据索引表,获取这个元素应该在那一块,然后直接把元素加入到相应的块里,而块内的元素直接不需要有序。从上面可知,分块查找只需要索引表有序,每一个块里的元素可以是无序的,但第i块的每个元素一定比第i-1块的每一个元素大(小)。当索引表很大的时候,可以对索引表进行二分查找,锁定块的位置,然后对块内的元素进行顺序查找。总性能不如二分查找,但强过顺序查找,更好的是不需要数列完全有序。举个例子,比如索引表为【10,20,30】,分块一【2,1,4,2】分块二【19,15,18,】分块三【22,27,23】,现在要增加22这个数,直接根据索引表把22放到分块三最后就行了【22,27,23,22】。 可以看出,分块查找同时有顺序查找和二分查找的有点————不需要有序、速度快。 应用场景 视频网站对用户观看行为记录,每个用户分别观看了一个视频多久,如果对每条这样的记录都放到一个表里,那太多了,可以根据具体业务做分表,一天一个表,表名如t_user_watch_xxx_20180806,存储查询的时候就可以根据时间去做一个表的分块,在查询详细的记录。 //分块查找 import java.util.ArrayList; public class BlockSearch { private int[] index; private ArrayList<ArrayList<Integer>> list; public BlockSearch(int[] index) { this.index = index; list = new ArrayList<ArrayList<Integer>>(); for(int i = 0; i < index.length; i++) { list.add(new ArrayList<Integer>()); } } public void insert(Integer value) { int i = binarySearch(value); list.get(i).add(value); } public boolean search(int data) { int i = binarySearch(data); for(int j = 0; j < list.get(i).size(); j++) { if(data == list.get(i).get(j)) { return true; } } return false; } public void printAll() { for(int i = 0; i < list.size(); i++) { ArrayList<Integer> l = list.get(i); System.out.println("ArrayList: " + i + ":"); for(int j = 0; j < l.size(); j++) { System.out.println(l.get(j)); } } } private int binarySearch(int target) { int start = 0; int end = index.length - 1 ; int mid = -1; while(start <= end) { mid = (start + end) / 2; if(target == index[mid]) { return mid; }else if(target < index[mid]) { end = mid - 1; }else { start = mid + 1; } } return start; } }

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

Android开发bug收集(疑难bug 持续更新)

一、关于FloatingActionButton的bug 1、错误信息: Error inflating class android.support.design.widget.FloatingActionButton 2、解决方法: 将android:backgroundTint="#ffffff"换成app:backgroundTint="#ffffff" 某次删除一个adapter之后出现的bug 1、错误信息: The activity must be exported or contain an intent-filter bug显示 2、解决策略: 点击下拉框选择app,即可运行 解决方法 二、关于 A/chromium: [FATAL:jni_android.cc(243)] Please include Java exception stack in crash report 的bug 1、错误信息 A/chromium: [FATAL:jni_android.cc(243)] Please include Java exception stack in crash report 一个 bug 因为的 log 日志 bug 的颜色我设置为红色,这次闪退是个紫色 好生奇怪,遇到 bug 第一反应就是去百度;但是度娘的给我的答案不是我想要的。 最后经过分析 log 日志。 2、产生原因 js 交互时,拦截 js 弹窗 拿出来的 message 截取字符串少截取 一位 将 “:”和一堆数字,一起进行了Integer.parseInt(deviceId) 操作,导致。 3、解决方案: 调整截取。 三、关于A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 9657 (Thread-728) 1、错误信息 A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 9657 (Thread-728) 一个触及底层的 bug 2、产生原因 由于 Android 通过嵌套webView 方式进行混合开发,导致手机软件内部 webview 使用的是手机自带的浏览器内核,加之我家 JS 兄弟代码有点窝囊,出现 该问题,国内开发者已经无法解决该问题,后经过谷歌查明原因,由于 JS内部代码出现的部分出现不合理调用,导致与手机内核产生 bug 猛一看以为是开个线程即可解决,但不能开工作线程加载url 产生矛盾。所以这个问题解决需要触及底层。。。。巴拉巴拉一堆,那就没办法解决了。 我遇到该问题是 : url 内的网页有百度的热力图,然后只有 vivo 加载该 url 就崩溃,其他设备没有任何,事情。后查明, vivo 浏览器内核为google的内核,其他的大部分设备为 Webkit 。 3、解决方案 真的无法解决的话,那我就不写了,辞职就好了嘛。 解决办法为项目内引入 腾讯X5 内核,加载该url 使用腾讯内核即可完美解决该问题。

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

Ionic3最新坑记录[持续更新]

1.错误信息:Camera.getPicture: source type 1 not available. 解决方案:在ionic3以后的版本,使用camera插件时,options中的图片来源类型,不能用0或1了,需要用枚举表示。 var sourceType; if (index == 1) { sourceType = this.camera.PictureSourceType.CAMERA; } else if(index == 0){ sourceType = this.camera.PictureSourceType.PHOTOLIBRARY; } var options = { ... sourceType: sourceType,// PHOTOLIBRARY = 0 CAMERA = 1 SAVEDPHOTOALBUM = 2 }; this.camera.getPicture(options).then((imageData) => { ///uploading... }) 2.错误信息:Archive Upload Successful 成功,但是iTunes不显示构建版本。 解决方案:在使用了cordova调用设备api,要在.info.plist中加入对应的权限提示。 麦克风权限:Privacy - Microphone Usage Description 是否允许此App使用你的麦克风? 相机权限: Privacy - Camera Usage Description 是否允许此App使用你的相机? 相册权限: Privacy - Photo Library Usage Description 是否允许此App访问你的媒体资料库? 通讯录权限: Privacy - Contacts Usage Description 是否允许此App访问你的通讯录? 蓝牙权限:Privacy - Bluetooth Peripheral Usage Description 是否许允此App使用蓝牙? 语音转文字权限:Privacy - Speech Recognition Usage Description 是否允许此App使用语音识别? 日历权限:Privacy - Calendars Usage Description 是否允许此App使用日历? 定位权限:Privacy - Location When In Use Usage Description 我们需要通过您的地理位置信息获取您周边的相关数据 定位权限: Privacy - Location Always Usage Description 我们需要通过您的地理位置信息获取您周边的相关数据 3.ionic3打包iOS包使用xcode build时报错: duplicate symbol OBJC_CLASS$_CDVLogger in.. linker command failed with exit code 1 (use -v to see invocation) 解决方案 ionic cordova platform rm ios ionic cordova platform add ios@4.4.0 4. 隐藏ionic3启动界面的小菊花 解决方案:在config.xml增加如下配置: <preference name="ShowSplashScreenSpinner" value="false" /> 5.ionic使用WKWevView后出现跨域请求: {"_body":{"isTrusted":true},"status":200,"statusText":"Ok","headers":{},"type":3,"url":null}" 解决方案:强制cordova使用默认引擎(UIWebView),参考资料:https://ionicframework.com/docs/wkwebview/ <preference name="CordovaWebViewEngine" value="CDVUIWebViewEngine" /> 5.Ionic build android, Error: spawn EACCES 解决方案:https://github.com/ionic-team/ionic-cli/issues/2176

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

《老罗Android开发视频教程》更新

记得之前在博客园里发表的《老罗将死,或者Android也将就换代,但是互联网的,共享,互助精神将永存》有人说我会半途而废,毕竟300集。但是老罗现在依旧用行动回应这些质疑,昨晚就花了3个小时录制了两集视频,虽说这两集视频总共不到一个小时,但是老罗还是很乐意去分享!等着吧,国庆8天老罗决定不休息,计划录制四十集,同样会每天把新录制的分享到博客园!也有人怀疑300集太多,但是我告诉大家,老罗这次录制的这套教程,都是把每一个知识点都讲到了,如果大家哪块不太明白,可以专门去看某几集,如果是初学者,可以整套学习! 好了,多谢大家支持了,老罗工作去了,大家有疑问,可以在博客园发消息,也可以在微博上提问http://www.weibo.com/apkbus 电驴下载:http://www.verycd.com/topics/2929580/更全的专题:http://luo.apkbus.com/ 百度网盘下载:http://pan.baidu.com/share/link?shareid=7300&uk=3339495714 源码和PPT,稍后统一发到博客园 android入门介绍 《老罗Android开发视频教程》第一集:android学习路线图介绍.avi详情 42.5MB 《老罗Android开发视频教程》第二集:android系统框架的介绍.avi详情 122.4MB 《老罗Android开发视频教程》第三集:android搭建开发环境介绍.avi详情 37.2MB 《老罗Android开发视频教程》第四集:android生命周期的介绍.avi详情 62.8MB 《老罗Android开发视频教程》第五集:android使用意图传递数据之全局变量传递.avi详情 52.9MB 《老罗Android开发视频教程》第六集:android使用意图传递数据之剪切板传递.avi详情 87MB 《老罗Android开发视频教程》第七集:android使用意图传递数据之通用方式.avi详情 140.5MB 《老罗Android开发视频教程》第八集:android使用静态变量传递数据.avi详情 35.4MB 《老罗Android开发视频教程》第九集:android使用意图传递数据之返回结果.avi详情 153.8MB 百度地图实战开发 《老罗Android开发视频教程》第一集:百度地图搭建开发环境.avi详情 128.8MB 《老罗Android开发视频教程》第二集:百度地图覆盖物的描述.avi详情 80.8MB 《老罗Android开发视频教程》第三集:百度地图多个覆盖物的描述.avi详情 93.1MB 《老罗Android开发视频教程》第四集:如何根据范围和检索词发起范围检索.avi详情 100.4MB 《老罗Android开发视频教程》第五集:标注驾车路线搜索.avi详情 97MB 《老罗Android开发视频教程》第六集:标注行走路线搜索.avi详情 67.6MB 《老罗Android开发视频教程》第七集:公交换乘路线搜索.avi详情 45.6MB 《老罗Android开发视频教程》第八集:查询某一路公交路线详情搜索.avi详情 98.5MB 《老罗Android开发视频教程》第九集:如何在一个地图上显示多条导航路线.avi详情 63.6MB 《老罗Android开发视频教程》第十集:经纬度和地址的转换.avi详情 203.2MB android常用布局的介绍 《老罗Android开发视频教程》第一集:android布局常用属性的介绍.mp4详情 56MB 《老罗Android开发视频教程》第二集:android线性布局的介绍.mp4详情 64.7MB 《老罗Android开发视频教程》第三集:android框架布局的使用.mp4详情 17.3MB 《老罗Android开发视频教程》第四集:android相对布局的使用.mp4详情 29MB 《老罗Android开发视频教程》第五集:android表格布局的介绍.mp4详情 35.9MB android之http协议编程 《老罗Android开发视频教程》:查看http协议内容的工具httpwatch.zip详情 24.8MB 《老罗Android开发视频教程》第一集:http协议的介绍.mp4详情 53.6MB 《老罗Android开发视频教程》第二集:http协议GET方式获取图片.mp4详情 70.6MB 《老罗Android开发视频教程》第三集:http使用Post方式进行提交数据.mp4详情 80.6MB 《老罗Android开发视频教程》第四集:http使用apache工具类提交数据.mp4详情 42.1MB android解析xml文件 《老罗Android开发视频教程》第一集:android使用sax解析xml.mp4详情 77.3MB 《老罗Android开发视频教程》第二集:android使用pull解析xml.mp4详情 。 本文转自qianqianlianmeng博客园博客,原文链接:http://www.cnblogs.com/aimeng/archive/2012/09/19/2693620.html ,如需转载请自行联系原作者

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

MaxCompute常用语句汇总(更新ing)

大数据计算服务(MaxCompute,原名ODPS, 产品地址: https://www.aliyun.com/product/odps ) 是一种快速、完全托管的TB/PB级数据仓库解决方案。MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全。本文收录了一些MaxCompute常用SQL、MR、Tunnel等语句,帮助您快速了解并使用MaxCompute/ODPS。 创建内部表 CREATE TABLE table_name (name string); 创建内部表,并指定分区字段 CREATE TABLE table_name (name string) PARTITIONED BY (ds string); 创建内部表,并指定生命周期 C

资源下载

更多资源
腾讯云软件源

腾讯云软件源

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

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册