算法
菜鸡程序员的进阶
公众号:菜鸡程序员的进阶
展开
-
leetcode——8. String to Integer (atoi) (java)
这道题其实就是将字符串转化为整型。这个题不算难,但是主要需要注意一些特殊条件以及边界判定。1、要求如果转化整型溢出,则输出最大(2^32-1)或最小值(-2^32)2、如果首字符不是正负号或数字,则输出13、开头不能连续是字符。比如“+-2”这个要输出为04、开头可以时连续的空格,字符串转换从非空格的第一个字符开始。如" -42" 输出-42首先这个int溢出问题,与第...原创 2018-09-09 20:54:05 · 304 阅读 · 0 评论 -
leetcode——7. Reverse Integer(java)
Given a 32-bit signed integer, reverse digits of an integer.Example 1:Input: 123Output: 321Example 2:Input: -123Output: -321Example 3:Input: 120Output: 21Note:Assume we are dea...原创 2018-09-09 17:09:34 · 394 阅读 · 0 评论 -
leetcode——3. Longest Substring Without Repeating Characters
这道题的目标就是找最长连续无重复子串的长度。要求:1、最长子串2、无重复字符3、连续我的解题过程:第一次,wrong answer 错误代码如下:class Solution { public int lengthOfLongestSubstring(String s) { int max=0,submax=0,length=s.length(...原创 2018-09-03 21:14:52 · 113 阅读 · 0 评论 -
leetcode——5.Longest Palindromic Substring(java)
题目:找到最大的回文子串首先,回文串就是左右对称的字符串。要解这道题首先应该知道如何判断一个字符串是否是回文串。我的思想很简单,就是定义两个指针i,j,初始指向字符串头和尾,依次向里收缩。长度为奇数的字符串最后两个指针相遇,即i=j。长度为偶数的字符串最后相邻,即j=i+1。直到最后,若i和j满足上面的这个条件,则说明该字符串是回文串。然后再通过遍历,找到最长的回文子串。这个算法的复杂度应...原创 2018-09-04 21:17:33 · 719 阅读 · 1 评论 -
c++实现 数组中的选择问题——最大,最大最小,第二大,第k小
今天介绍一下选择问题,包括选最大,选最大最小,第二大,和一般选择问题即选第k小的数。概括:选最大使用顺序算法,选最大最小可以使用顺序算法、分组方法,分治法,第二大可以使用顺序算法和锦标赛算法,选第k小的数,这里介绍一个改进的分治法算法(一般的分治法是随机选择进行比较的数,改进算法是对进行比较的数进行选择最优的)下面依次介绍。选最大直接使用顺序比较,定义max变量,初始值为第一个数,依次...原创 2018-08-15 17:20:31 · 6119 阅读 · 1 评论 -
分治法(二)—— 芯片测试(c++)
芯片测试测试方法:将两片芯片(a,b)置于测试台上,互相进行测试,测试报告为“好”或“坏”,只取其一。假设:好芯片的报告一定是正确的,坏芯片的报告是不确定的(可能会出错)测试结果分析:A报告 B报告 结论 B是好的 A是好的 AB都好或AB都坏 B是好的 A是坏的 至少一片是坏的 B是坏的 A是好的 至少一片是坏的 B...原创 2018-07-20 23:06:01 · 8103 阅读 · 1 评论 -
分治法(一)(c++)实现二分检索,二分归并排序,汉诺塔问题
分治策略:1、将原始问题划分或归结为规模较小的子问题。2、递归或者迭代求解每个子问题3、将子问题的解综合得到原问题的解注意:1、子问题与原问题的性质完全一样2、子问题之间可以彼此独立求解3、递归停止时,子问题可以直接求解。分治法的应用1、二分检索int binarySearch(vector<int> a,int begin,int end,i...原创 2018-07-19 16:31:29 · 884 阅读 · 0 评论 -
递推方程求解方法
总结一下递归方程的求解方法。1、迭代法不断用递推方程的右部替换左部,下面以汉诺塔为例进行求解。有时候直接迭代可能不太方便,可以使用换元迭代。下面以二分归并排序迭代方程为例进行求解。2、差消法 差消法一般应用在递归方程右边不仅仅只依赖于当前项的前一项,而是前很多项,这种递归方程直接用迭代法很麻烦。属于高阶递归方程,因此要先把高阶递归方程进行差消,再进行迭代。以快速排序的递归方程为例。3、递归...原创 2018-07-13 21:26:58 · 32393 阅读 · 5 评论 -
分治法(三)——快速排序(c++)
快速排序基本思想:将首元素x作为划分标准,将输入数组A划分为不超过x的元素构成数组A1,将大于x的元素构成的数组作为A2,从左到右存放在数组A的位置。递归的对子问题A1,A2进行排序,知道子问题规模为1时停止。过程:代码:int swap(vector<int> &a,int begin,int end,int x){ int i=begin+1...原创 2018-07-23 20:18:47 · 1591 阅读 · 0 评论 -
leetcode——6. ZigZag Conversion(java)
题目:The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)P A H NA P L ...原创 2018-09-07 15:18:52 · 424 阅读 · 0 评论