算法
野蛮秘籍
这个作者很懒,什么都没留下…
展开
-
冒泡排序
原理两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。实现function bubbleSort($array) { // 不是数组或者空数组,直接返回 if (!is_array($array) || count($array) == 0) return $array; $count = count($array); if ($cou原创 2017-05-12 11:16:07 · 198 阅读 · 0 评论 -
Count and Say
The count-and-say sequence is the sequence of integers with the first five terms as following: 1 11 21 1211 111221 1 is read off as “one 1” or 11. (1个1) 11 is read off as “two 1s” or原创 2017-08-02 09:43:08 · 255 阅读 · 0 评论 -
最大连续子数组和
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array [-2,1,-3,4,-1,2,1,-5,4], the contiguous subarray [4,-1,2,1] has the原创 2017-08-02 10:54:55 · 260 阅读 · 0 评论 -
二进制相加
Given two binary strings, return their sum (also a binary string). For example, a = “11” b = “1” Return “100”.主要处理好进位的问题,PHP实现代码如下:function BinaryAdd($num1, $num2) { $last_index_1 = strlen($n原创 2017-08-03 11:28:50 · 611 阅读 · 0 评论 -
罗马字符与整数互转
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999.思路罗马数字有如下符号: 基本字符 I V X L C D M 对应阿拉伯数字 1 5 10 50 100 500 1原创 2017-07-25 15:01:07 · 1181 阅读 · 0 评论 -
Valid Parentheses
Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid. The brackets must close in the correct order, “()” and “()[]{}” are all vali原创 2017-07-26 17:02:23 · 199 阅读 · 0 评论 -
移除有序数组中的重复元素
Remove Duplicates from Sorted Array Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for another原创 2017-07-27 14:19:21 · 851 阅读 · 0 评论 -
实现strstr
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.实现代码如下:function strstr1($haystack, $needle) { $len1 = strlen($haystack); $len2 = str原创 2017-07-28 14:40:05 · 274 阅读 · 0 评论 -
Best Time to Buy and Sell Stock(最佳买卖股票时间)
Say you have an array for which the ith element is the price of a given stock on day i.If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), d转载 2017-08-14 10:42:15 · 299 阅读 · 0 评论 -
回文数&&回文串
“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。回文数类似,如121,12121等。1、判断给定的字符串是会否是回文串// 设定两个指针,分别指向字符串的头尾,比较头尾指针对应的值,直到指向同一位置为止。如果首尾都相同则为回文串。function isPalindrome($str) { if (strlen($str) == 0)原创 2017-07-24 11:14:33 · 425 阅读 · 0 评论 -
Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters. Examples: Given “abcabcbb”, the answer is “abc”, which the length is 3. Given “bbbbb”, the answer is原创 2017-07-18 15:59:27 · 211 阅读 · 0 评论 -
Search Insert Position
Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it wereinserted in order. You may assume no duplicates in the array.原创 2017-07-31 11:05:29 · 185 阅读 · 0 评论 -
PHP实现排序算法总结
1、冒泡排序原理:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。 时间复杂度:该算法的时间复杂度为O(n2)。但是,当原始关键字序列已有序时,只进行一趟比较就结束,此时时间复杂度为O(n)。function bubbleSort($array) { // 不是数组或者空数组,直接返回 if (!is_array($array) |原创 2016-05-31 15:36:35 · 456 阅读 · 0 评论 -
快速排序
原理通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。实现function quickSort($arr) { if (!is_array($arr) || count($arr) == 0) return $arr;原创 2017-05-17 16:24:24 · 239 阅读 · 0 评论 -
选择排序
原理每一趟在n-i+1(i=1,2,3…n)个记录中选取关键字最小的记录作为有序序列的第i个记录。实现function selectSort($arr) {//双重循环完成,外层控制轮数,内层控制比较次数 $len=count($arr); for($i=0; $i<$len-1; $i++) { //先假设最小的值的位置 $p = $i;原创 2017-05-18 10:59:41 · 199 阅读 · 0 评论 -
插入排序
原理将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,是稳定的排序方法。实现从第二个元素开始往后,依次选择哨兵元素和前面的元素比较,如果前一个元素大于该哨兵元素(从小到大排序),则把前面那个元素移动到后一个位置;继续往前比较,直到找某个元素不大于该哨兵元素,则把哨兵元素插入到位置上。 插入排序的步骤: 1、第二个元素开始外后选择原创 2017-05-18 14:36:01 · 264 阅读 · 0 评论 -
希尔排序
原理先将整个待排元素序列分割成若干个子序列(由相隔某个“增量(increment)”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,当增量减少至 1 时,整个序列恰好被分成一组,算法便终止。实现比如: 数组有10个元素,增量 d = 5;则比较元素为:array[0] array[0+d] array[0+2d] array[0+3d];(当然 d 会原创 2017-05-18 16:30:59 · 248 阅读 · 0 评论 -
归并排序
原理利用归并(合并)的思想实现的排序方法。它的原理是假设初始序列含有 n 个元素,则可以看成是 n 个有序的子序列,每个子序列的长度为 1,然后两两归并,得到 ⌈n / 2⌉ (⌈ x ⌉ 表示不小于 x 的最小整数)个长度为 2 或 1 的有序序列;再两两归并,······,如此重复,直至得到一个长度为 n 的有序序列为止,这种排序方法就成为 2 路归并排序。实现a[i] 取 a 数组的前部分(已原创 2017-05-19 16:21:14 · 216 阅读 · 0 评论 -
左旋转字符串
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾 部,如把字符串 abcdef 左旋转 2 位得到字符串 cdefab。请实现字符串左旋转的 函数,要求对长度为 n 的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1)。思路:三步反转法将一个字符串分成两部分,X 和 Y 两个部分,在字符串上定义反转的操作 X^T, 即把 X 的所有字符反转(如,X=”abc”,那么 X^T原创 2017-07-12 10:25:17 · 248 阅读 · 0 评论 -
字符串是否包含
假设这有一个各种字母组成的字符串 A,和另外一个字符串 B,字符串里 B 的字母数相对少一些。什么方法能最快的查出所有小字符串 B 里的字母在大字符 串A里都有? 比如,如果是下面两个字符串: String 1: ABCDEFGHLMNOPQRS String 2: DCGSRQPO 答案是 true,所有在 string2 里的字母 string1 也都有。 如果是下转载 2017-07-13 15:12:24 · 371 阅读 · 0 评论 -
PHP实现数组中两个数的和等于给定的目标值
算法: 1、以数组中的值为索引创建新的数组$tmp 2、求出目标值减去数组值得差值 3、判断该差值是否在\$tmp中。 php实现代码如下/** * Given an array of integers, return indices of the two numbers such that they add up to a specific target. * You may原创 2017-07-17 14:16:33 · 2236 阅读 · 2 评论