从零开始写算法
stay_the_course
这个作者很懒,什么都没留下…
展开
-
剑指offer--空格替换
题目描述:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy算法描述:1.遍历一次,统计出空格的个数count,则字符串替换之后的新长度newlen = 2*count + oldlen 2.采用从后往前的方式遍历原字符串,将原字符串中的空格替换成%20即可 3.用newlen作为替换的下标,用原创 2017-10-15 00:16:48 · 217 阅读 · 0 评论 -
LintCode 451. 两两交换链表中的节点(C++递归法实现)
1.描述给一个链表,两两交换其中的节点,然后返回交换后的链表。样例样例 1:输入:1->2->3->4->null输出:2->1->4->3->null样例 2:输入:5->null输出:5->null2.代码ListNode *swapPairs(ListNode *head) { if (!head...原创 2019-03-21 23:40:42 · 402 阅读 · 0 评论 -
LintCode 9 Fizz Buzz 问题(java实现,只用一个if)
1.说明给你一个整数n. 从 1 到 n 按照下面的规则打印每个数:如果这个数被3整除,打印fizz.如果这个数被5整除,打印buzz.如果这个数能同时被3和5整除,打印fizz buzz.如果这个数既不能被 3 整除也不能被 5 整除,打印数字本身。2.挑战是否可以只用一个 if 来实现3.样例比如 n = 15, 返回一个字符串数组:[ "1", "2", "fizz"...原创 2019-05-07 11:26:15 · 731 阅读 · 0 评论 -
LintCode 96. 链表划分(java实现,O(N))
描述给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。样例样例 1:输入: list = null, x = 0输出: null 样例解释: 空链表本身满足要求样例 2:输入: list = 1->4->3->2->5->2->null, x = 3输出: 1->...原创 2019-05-20 11:27:33 · 267 阅读 · 0 评论 -
LintCode 44 最小子数组(java实现,O(N))
描述给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。备注子数组最少包含一个数字样例输入:[1, -1, -2, 1]输出:-3输入:[1, -1, -2, 1, -4]输出:-6输入:[5, -4]输出:-4分析1.求最小子数组,当累加和大于零的时候其实是无意义的,不需要记录,此时更新为当前元素2.新累加和和上一次最小值相比,将最小值更新代码publ...原创 2019-05-07 19:52:21 · 268 阅读 · 0 评论 -
LintCode 100. 删除排序数组中的重复数字(java实现,O(N),O(1))
描述给定一个排序数组,在原数组中“删除”重复出现的数字,使得每个元素只出现一次,并且返回“新”数组的长度。不要使用额外的数组空间,必须在不使用额外空间的条件下原地完成。样例样例 1:输入: []输出: 0样例 2:输入: [1,1,2]输出: 2 解释: 数字只出现一次的数组为: [1,2]分析定义两个索引,一前一后,后面的一直递增和前面的比较。相同就++,不通...原创 2019-05-20 15:27:57 · 557 阅读 · 0 评论 -
LintCode 60. 搜索插入位置(java实现,O(nlogn))
描述给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。注意你可以假设在数组中无重复元素。样例[1,3,5,6],5 → 2[1,3,5,6],2 → 1[1,3,5,6], 7 → 4[1,3,5,6],0 → 0分析二分法即可,需要注意的是在数组中找不到target的时候,如何确定正确的插入位置我的代码中,出...原创 2019-05-10 15:37:52 · 167 阅读 · 0 评论 -
LintCode 3. 统计数字(Java实现,拒绝暴力破解)
描述计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值样例样例 1:输入:k = 1, n = 1输出:1解释:在 [0, 1] 中,我们发现 1 出现了 1 次 (1)。样例 2:输入:k = 1, n = 12输出:5解释:在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 中,我们发现 1 出...原创 2019-06-14 16:10:39 · 301 阅读 · 1 评论 -
Lintcode 13. 字符串查找(java实现)
原题:LintCode 13.字符串查找描述:对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1。样例 1:输入: source = "source" , target = "target"输出:-1 样例解释: 如果source里没有包含target的内容...原创 2019-07-23 14:16:42 · 331 阅读 · 0 评论 -
lintcode 1119 三个数的最大乘积(java实现)
1.描述给定一个整数数组,找到三个元素,使乘积最大,返回该积。注:数组的长度范围为[3, 10^4],所有的元素范围为[-1000, 1000]。 任意三个元素的积不会超过32位有符号整数的范围。样例样例 1:输入: [1,2,3]输出: 6样例 2:输入: [1,2,3,4]输出: 242.代码public int maximumProduct(int[] nums...原创 2019-03-21 19:56:23 · 329 阅读 · 0 评论 -
LintCode区间查询(java实现)
1.描述给定一个包含若干个区间的List数组, 区间的长度是 1000, 例如 [500,1500], [2100,3100].给定一个 number ,请问number是否在这些区间内.返回 True 或 False.输入: List = [[100,1100],[1000,2000],[5500,6500]] 和 number = 6000输出: true解释:6000 在区间[55...原创 2019-03-12 12:31:43 · 860 阅读 · 0 评论 -
剑指offer--从尾到头打印链表
题目描述输入一个链表,从尾到头打印链表每个节点的值。算法描述(非递归)1.从头到尾遍历链表,将每个结点存入栈中 2.遍历输出栈(由于剑指offer给的返回值为vector<int>,所以遍历栈的时候将元素在存入vector中)代码vector<int> printListFromTailToHead(ListNode* head) { vector<int> v; if原创 2017-10-16 11:44:01 · 272 阅读 · 0 评论 -
汉明距离 & 二进制中1的个数
1.汉明距离汉明距离是使用在数据传输差错控制编码里面的,汉明距离是一个概念,它表示两个(相同长度)字对应位不同的数量,我们以d(x,y)表示两个字x,y之间的汉明距离。对两个字符串进行异或运算,并统计结果为1的个数,那么这个数就是汉明距离。2.汉明距离变形求两个数的二进制中的不同位的个数,比如5(101)和3(011)汉明距离就是2,3.解题思路当我们看到求解两个数的二进制中的...原创 2018-04-01 13:43:51 · 764 阅读 · 1 评论 -
lintcode ->尾部的零(c++实现)
设计一个算法,计算出n阶乘中尾部零的个数class Solution {public: /* * @param n: A long integer * @return: An integer, denote the number of trailing zeros in n! */ long long trailingZeros(long long...原创 2018-12-03 20:30:04 · 246 阅读 · 0 评论 -
lintcode -- 合并有序数组(c++实现)
合并两个排序的整数数组A和B变成一个新的数组。class Solution {public: /** * @param A: sorted integer array A * @param B: sorted integer array B * @return: A new sorted integer array */ vect...原创 2018-12-03 20:32:20 · 233 阅读 · 0 评论 -
lintcode -- 旋转字符串(c++实现)
给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)class Solution {public: /** * @param str: An array of char * @param offset: An integer * @return: nothing */ void rotateString(string &...原创 2018-12-03 20:34:39 · 490 阅读 · 0 评论 -
lintcode --最大子数组(c++实现)
class MaxSubArray {public: int maxSubArray(vector<int> &nums) { // write your code here // 判空 if (nums.size() == 0) { return 0; } in...原创 2018-12-06 14:59:39 · 295 阅读 · 0 评论 -
lintcode 644 镜像数字(Java实现)
1.描述一个镜像数字是指一个数字旋转180度以后和原来一样(倒着看)。例如,数字"69",“88”,和"818"都是镜像数字。写下一个函数来判断是否这个数字是镜像的。数字用字符串来表示。2.样例样例1:输入 : “69”输出 : true样例 2:输入 : “68”输出 : false3.代码public boolean isStrobogrammatic(String nu...原创 2019-03-14 10:56:17 · 567 阅读 · 0 评论 -
LintCode两数之和(java实现)
1.描述给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0 到 n-1。Example1:给出 numbers = [2, 7, 11, 15], target = 9, 返回 [0, 1].Example2:给出 numbers = [15, 2, 7, 1...原创 2019-03-12 12:29:41 · 238 阅读 · 0 评论 -
LintCode--28.搜索二维矩阵
链接:搜索二维矩阵解题思路:矩阵按行遍历,从右上角到左下角public boolean searchMatrix(int[][] matrix, int target) { // write your code here if (matrix.length < 1) { return false; } ...原创 2019-08-28 11:03:32 · 241 阅读 · 0 评论