arr

几种排序算法

梦想与她 提交于 2019-12-01 10:06:22
1、冒泡排序 最简单的一种排序算法。假设长度为n的数组arr,要按照从小到大排序。则冒泡排序的具体过程可以描述为:首先从数组的第一个元素开始到数组最后一个元素为止,对数组中相邻的两个元素进行比较,如果位于数组左端的元素大于数组右端的元素,则交换这两个元素在数组中的位置,此时数组最右端的元素即为该数组中所有元素的最大值。接着对该数组剩下的n-1个元素进行冒泡排序,直到整个数组有序排列。算法的时间复杂度为O(n^2)。 // 冒泡排序 void BubbleSort(int arr[], int length) { for (int i = 0; i < length; i++) { for (int j = 0; j < length - i - 1; j++) { if (arr[j] > arr[j + 1]) { int temp; temp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = temp; } } } } 假设我们现在排序ar[]={1,2,3,4,5,6,7,8,10,9}这组数据,按照上面的排序方式,第一趟排序后将10和9交换已经有序,接下来的8趟排序就是多余的,什么也没做。所以我们可以在交换的地方加一个标记,如果那一趟排序没有交换元素,说明这组数据已经有序,不用再继续下去。 void BubbleSort(int arr

算法笔记-接雨水问题

依然范特西╮ 提交于 2019-12-01 10:03:36
说明:如下图,每个元素表示柱子的高度,黑色的为柱子,灰色的为接到的雨水。给定一个数组之后,求可接的雨水是多少。 注意:(1)没有经过大量测试不敢保证没有漏洞 (2)只是个人想法,不敢保证最优 1 <?php 2 $arr = array(0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1); 3 //key:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) 4 5 6 //(1)首先要分块(装水的块),比如图中就分了三块。 7 //至于怎么分呢,先找出最高的,例子中键值为7的元素最高; 8 function findMax($arr) 9 { 10 $val = current($arr); 11 $key = key($arr); 12 $i = -1; $pos = 0; //记录位置(最大值是第几个元素,原数组的key值不可用),用于array_slice 13 14 foreach ($arr as $k => $v) { 15 $i++; 16 if ($v > $val) { 17 $val = $v; 18 $key = $k; 19 $pos = $i; 20 } 21 } 22 return compact('key', 'val', 'pos'); 23 } 24 25 //这个方法用于不停的寻找代表围墙的元素

js把一串字符串去重(能统计出字符重复次数更佳)

非 Y 不嫁゛ 提交于 2019-12-01 09:56:17
原文来自: https://juejin.im/post/5ba6e77e6fb9a05d0b14359b <script> let str = "12qwe345671dsfa233dsf9876ds243dsaljhkjfzxcxzvdsf"; let array = str.split(""); //方案一: array = [...new Set(array)].join(""); array = ((a)=>[...new Set(a)])(array).join(""); console.log(array);//12qwe34567dsfa98ljhkzxcv 只能过滤,不会统计 //方案二: function unique (arr) { const seen = new Map() return (arr.filter((a) => !seen.has(a) && seen.set(a, 1))).join(""); } console.log(unique(array)) // 12qwe34567dsfa98ljhkzxcv //方案三: function unique (arr) { let arrs=[]; var news_arr = arr.sort();//排序能减少一次循环 for(var i=0;i<news_arr.length;i++){

线性查找

若如初见. 提交于 2019-12-01 08:59:36
概念介绍   有同学想了解线性查找,今天它来了!线性查找是一种最简单的查找方法,看一看它的核心思想,凭什么说它最简单。 核心思想:给出一组序列,从头开始逐一对比,找到目标值则返回 。简单的说,就是遍历并逐一对比。不管再简单,也要举个例子。   需求:在序列arr=[2, 7, -5, 30, 9]中找到-5。   从数组头结点开始,arr[0]=2,!=-5,找下一个元素。   arr[1]=7,!=-5,找下一个元素。   arr[2]=-5,找到目标元素,返回即可。 代码实现   遍历+逐个比对,找到目标值。 1 public static int seqSearch(int[] arr, int value) { 2 for (int i = 0; i < arr.length; i++) { 3 if (arr[i] == value) { 4 return i; 5 } 6 } 7 return -1; 8 }   至此,代码编写完成,Git地址:https://github.com/HollowCup/algorithms-and-data-structure,具体实现位于algorithm工程下的search目录SeqSearch,如果发现不足之处,请联系我进行更改,十分感谢!关注我,为你揭秘更多查找算法! 来源: https://www.cnblogs.com

10JS数组

心已入冬 提交于 2019-12-01 08:58:18
1.new 创建:var arr=new Array();//创建了一个空数组 2.var 数组名=【】; 3.var 数组名=【“”,“”,“”,“”】 (数组的索引从0开始) a.数组去重 1.先用新数组存放 2.遍历原来的数组,把不是的添加到新数组里 3.新数组的个数,用.length不断累加 eg: var arr=[]; var newArr=[]; for(var i=0;i<arr.length;i++){ if(arr[i]!=0){ newArr[newArr.length]=arr[i]; } console.log(newArr); } 还有一个是冒泡排序 //思路:先比较一轮一次,然后用for循环比较一轮多次,然后再加for循环比较多轮多次 //从大到小排序 var array=[10,20,9,8,79,65,100]; //比较轮数 for ( var i=0;i<array.length-1;i++){ //每轮比较次数,次数=长度-1-此时的轮数 for (var j=0;j<array.length-1-i;j++) { if (array[j] > array[j + 1]) { var temp = array[i]; array[j] = array[j + 1]; array[j + 1] = temp; } //end if }//end

利用tp5开发智慧软文发布系统中遇到的一些坑

时光怂恿深爱的人放手 提交于 2019-12-01 08:48:36
1、 PHP 计算两个时间戳之间相差的时间 假设你两个时间戳为$a,$b; 你可以用$c=$a-$b;(反正就是大的减小的),这时$c就是两个时间间隔的秒数了。 想求两个时间间隔的天数就用:$c/(60*60*24) 一天的毫秒数是:86400,所以直接$c/86400 答案也是一样的 想求两个时间间隔的小时数就用:$c/(60*60) js 跳转链接的几种方式 1、跳转链接 在当前窗口打开 window.location.href="http://www.baidu.com" 等价于 <a href="baidu.com" target="_self">go baidu</a> 2、跳转链接 在新窗口打开 window.open("http://www.baidu.com") 等价于 <a href="baidu.com" target="_blank">go baidu</a> 3、跳转链接 返回上一页 window.history.back(-1); 4、跳转链接 self.location.href="baidu.com" self 指代当前窗口对象,属于window 最上层的对象。 location.href 指的是某window对象的url的地址 self.location.href 指当前窗口的url地址,去掉self默认为当前窗口的url地址,一般用于防止外部的引用

16.分治排序

你说的曾经没有我的故事 提交于 2019-12-01 08:01:49
分阶段可以理解为就是递归拆分子序列的过程 治阶段,我们需要将两个已经有序的子序列合并成一个有序序列,比如上图中的最后一次合并,要将[4,5,7,8]和[1,2,3,6]两个已经有序的子序列,合并为最终序列[1,2,3,4,5,6,7,8] import java.util.Arrays; /** * 归并排序 */ public class MergeSort { public static void mergeSort(int[] arr,int left,int right,int[] temp){ if (left<right){ int mid = (left+right)/2; //前一部分分解 mergeSort(arr,left,mid,temp); //后一部分分解 mergeSort(arr,mid+1,right,temp); //合并 merge(arr,left,mid,right,temp); } } /** * 合并 如 4,5,7,8, 1,2,3,6 * @param arr 原始数组 由两部分组成 * @param left 数组的第一个索引 * @param mid 数组前一部分最后一个元素的索引 * @param right 数组的最后一个索引 * @param temp 临时数组 */ public static void merge(int

15.快速排序

喜你入骨 提交于 2019-12-01 07:56:13
快速排序(Quicksort)是对冒泡排序的一种改进。 基本思想: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 实例解释: 1.先从数列中取出一个数作为基准数。 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 3.再对左右区间重复第二步,直到各区间只有一个数。 快速排序:挖坑填数+分治法 以一个数组作为示例,取区间第一个数为基准数。 0 1 2 3 4 5 6 7 8 9 72 6 57 88 60 42 83 73 48 85 初始时,i = 0; j = 9; X = a[i] = 72 由于已经将 a[0] 中的数保存到 X 中,可以理解成在数组 a[0] 上挖了个坑,可以将其它数据填充到这来。 从j开始向前找一个比X小或等于X的数。当j=8,符合条件,将a[8]挖出再填到上一个坑a[0]中。a[0]=a[8]; i++; 这样一个坑a[0]就被搞定了,但又形成了一个新坑a[8],再找数字来填a[8]这个坑。这次从i开始向后找一个大于X的数,当i=3,符合条件,将a[3]挖出再填到上一个坑中a[8]=a[3]; j--; 数组变为: 0 1 2 3 4 5 6 7 8 9 48 6 57

js获取iframe通过url传递的参数

让人想犯罪 __ 提交于 2019-12-01 07:47:46
1.前言 获取iframe的url路径:window.parent.document.getElementById("your-iframe-id").contentWindow.location.search; //需要iframe的ID 2 代码 根据参数名称通过正则获取参数值 function geturl(name) { var reg = new RegExp("[^\?&]?" + encodeURI(name) + "=[^&]+"); var arr = window.parent.document.getElementById("Ateon-SetParent-iframe").contentWindow.location.search.match(reg); if (arr != null) { return decodeURI(arr[0].substring(arr[0].search("=") + 1)); } return ""; } 3 参考 1.https://www.cnblogs.com/kcjm/p/7060073.html 来源: https://www.cnblogs.com/fanbi/p/11670266.html

Java中的数组

巧了我就是萌 提交于 2019-12-01 07:26:57
数组的定义 数组是指一组数据的集合,数组中的每个数据被称为元素。数组可以存放任意类型的元素,但同一数组里存放的元素必须一致。数组可分为一维数组和多维数组 在Java中,可以使用以下格式来定义一个数组 int[] x = new int[100]; 数组的元素赋值示例: public class Example01 { public static void main(String[] args) { int[] arr = new int[4]; //定义可以存储4个元素的整数类型数组 arr[0]=1; //为第1个元素赋值 arr[1]=2; //为第2个元素赋值 //依次打印数组中的每个元素的值 System.out.println("arr[0]="+arr[0]); System.out.println("arr[1]="+arr[1]); System.out.println("arr[2]="+arr[2]); System.out.println("arr[3]="+arr[3]); } } 在定义数组时只指定数组的长度,由系统自动为元素赋值的方式叫做动态初始化。在初始化数组时还有一种方式叫做静态初始化,就是在定义数组的同时就位数组的每个元素赋值。数组的静态初始化有两种格式,具体格式如下: 1. 类型[] 数组名 = new 类型[]{元素,元素,...} 2. 类型