算法
djh624
这个作者很懒,什么都没留下…
展开
-
字符串内部大小写交换
有一个由大小写组成的字符串,现在需要对他进行修改,将其中的所有小写字母排在大写字母的前面(大写或小写字母之间不要求保持原来次序),如有可能尽量选择时间和空间效率高的算法。 c语言函数原型void proc(char *str),也可以采用你自己熟悉的语言。 思路: 两个指针i,j 初始i指向头,j指向尾. 从头遍历,如果为大写,将位置i,j互换同时j-1,否则i+1,直到i=j. ...原创 2019-05-07 22:13:42 · 395 阅读 · 0 评论 -
海盗分赃问题
有5个海盗,按照等级从5到1排列。最大的海盗有权提议他们如何分享100枚金币。但其他人要对此表决,如果多数反对,那他就会被杀死。他应该提出怎样的方案,既让自己拿到尽可能多的金币又不会被杀死?(提示:有一个海盗能拿到98%的金币) 注意,是多数人反对才无效,意味着人数相同的情况下提议成功 思路: 逆推,只剩2人情况,自己拿100,,即两人情况下分配为2号100,1号0。 3人情况,1号...原创 2019-05-07 22:59:42 · 871 阅读 · 0 评论 -
单词拆分
给定一个非空字符串s和一个包含非空单词列表的字典wordDict,判定s是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 示例 1: 输入: s = "leetcode", wordDict = ["leet", "code"] 输出: true 解释: 返回 true 因为 "leetcode" 可...原创 2019-06-14 11:24:11 · 201 阅读 · 0 评论 -
单词拆分 II
单词拆分 II 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。 说明: 分隔时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 示例 1: 输入: s = "catsanddog" wordDict = ["cat", "cats", "and", "sand",...原创 2019-06-14 13:14:17 · 294 阅读 · 0 评论 -
旋转数组
这个题的一种解法挺有意思,记录一下。 给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3,4,5] 向右旋转 3 步: [5,6,7,1,2,3,4] 研究了半天,发现...原创 2019-06-26 19:34:23 · 96 阅读 · 0 评论 -
只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 其它出现两次,某元素只出现一次,看到这个第一反应就是异或。 因为 a^b^b = a; 所以只需要遍历异或,最后的结果就是只出现一次的元素 int singleNumber(vector<...原创 2019-06-26 19:42:29 · 116 阅读 · 0 评论 -
寻找两个有序数组的中位数
给定两个大小为 m 和 n 的有序数组nums1 和nums2。 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。 你可以假设nums1和nums2不会同时为空。 示例 1: nums1 = [1, 3] nums2 = [2] 则中位数是 2.0 示例 2: nums1 = [1, 2] nums2 = [3, 4] 则中...原创 2019-07-12 18:44:06 · 198 阅读 · 0 评论 -
最长回文串(马拉车算法)
/*最长回文子串(Manacher算法 马拉车算法-_-) 马拉车算法需要计算以每个字符为中心的回文串半径。并记录最右边界 马拉车算法基于这样一个事实,从回文串的中心到两边是对称的,意味着以两边对称的字符为中心的回文串半径相等(在不超过最右边界的情况下,如果超出就需要扩展搜索) */ public String longestPalindr...原创 2019-07-12 20:28:19 · 335 阅读 · 0 评论 -
完全平方数
给定正整数n,找到若干个完全平方数(比如1, 4, 9, 16, ...)使得它们的和等于n。你需要让组成和的完全平方数的个数最少。 示例1: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 示例 2: 输入: n = 13 输出: 2 解释: 13 = 4 + 9. 凑数是比较典型的广度搜索问题。 public int numSqua...原创 2019-08-21 14:43:24 · 229 阅读 · 0 评论