算法刷题
文章平均质量分 94
刷题记录,LintCode、剑指offer等
__Ryan
非典型性程序员~
展开
-
LeetCode-两数之和&三数之和
两数之和(easy)给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]方法一:暴力求解很自然的方法就是依次遍历数组中每个数,在剩下的数中找是否存在和为target的数...原创 2020-06-14 13:28:58 · 270 阅读 · 0 评论 -
剑指-数组中只出现一次的数字
题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。首先:位运算中异或的性质:两个相同数字异或=0,一个数和0异或还是它本身。当只有一个数出现一次时,我们把数组中所有的数,依次异或运算,最后剩下的就是落单的数,因为成对儿出现的都抵消了。依照这个思路,我们来看两个数(我们假设是AB)出现一次的数组。我们首先还是先异或,剩下的数字肯...原创 2020-02-24 21:25:39 · 133 阅读 · 0 评论 -
剑指-逆序对
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于%100的数据,...原创 2020-02-16 21:30:04 · 165 阅读 · 0 评论 -
剑指-丑数
题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。方法一、遍历判断。依次判断每个数字是不是丑数,如果一个数是丑数,那么他将只能够被2、3、5所整除。bool isUgly(int n){ while(n % 2 == 0){ ...原创 2020-02-04 12:07:34 · 151 阅读 · 0 评论 -
LintCode 用递归打印数字
用递归的方法找到从1到最大的N位整数。样例给出 N = 1, 返回[1,2,3,4,5,6,7,8,9].给出 N = 2, 返回[1,2,3,4,5,6,7,8,9,10,11,...,99].挑战 用递归完成,而非循环的方式。方法一:循环输出最大的数为10^n -1class Solution {public: /**原创 2017-03-22 13:01:46 · 896 阅读 · 0 评论 -
LintCode 主元素
给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。样例给出数组[1,1,1,1,2,2,2],返回 1方法一:枚举法,时间复杂度O(n2)依次比较每个数出现的次数,记下出现次数最多的值,如果出现次数大于个数的一半,返回它。class Solution {public: /** * @param nums: A li原创 2017-02-08 18:06:35 · 331 阅读 · 0 评论 -
LintCode 最大子数组(3种方法)
给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。样例给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6方法一:暴力枚举,时间复杂度O(n3)1、找出子数组的最左端点 for i2、找出子数组的最右端点 for j3、求和,找出最大值 sum =原创 2017-02-08 16:22:39 · 11231 阅读 · 1 评论 -
LintCode 找到单链表倒数第n个节点&删除倒数第n个节点
给出链表3->2->1->5->null和n = 2,返回倒数第二个节点的值1.设置2个指针,当第一个指针从表头向前走到第n-1个节点时,第二个指针开始从表头出发。当第一个指针走到尾节点时,第二个指针的位置即为倒数第n个节点class Solution {public: /** * @param head: The first node of li原创 2016-03-27 19:59:05 · 4008 阅读 · 0 评论 -
剑指-字符串全排列
输入一字符串(要求不存在重复字符),打印出该字符串中字符中字符的所有排列。例如:输入"abc",输出结果为abc, acb, bac, bca, cab和cba。#include #include using namespace std;void swap( char *a, char *b){ char temp; temp = *a; *a = *b; *b =原创 2016-03-26 13:29:18 · 618 阅读 · 0 评论 -
把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。#include #include #include #include using namespace std;bool compare( const string &str1, const string原创 2016-03-25 21:42:27 · 269 阅读 · 0 评论 -
LintCode 查找斐波纳契数列中第 N 个数
所谓的斐波纳契数列是指:前2个数是 0 和 1 。第 i 个数是第 i-1 个数和第i-2 个数的和。斐波纳契数列的前10个数字是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...给定 1,返回 0给定 2,返回 1给定 10,返回 34题目就是斐波那契数算法的变形。关于斐波那契数,首先想到递归cla原创 2016-03-23 14:17:16 · 3312 阅读 · 1 评论 -
LintCode 删除链表中等于给定值val的所有节点
给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。C++语言递归形式:每次对头进行判断是否此值等于给定值val,如果相等则将此节点删除,将下一个节点作为头节点递归调用自己,否则将此节点的下一个节点为作为头节点递归调用自己,调用后的返回值作为此时头节点的下一个节点。/* * Definition原创 2016-03-23 13:21:08 · 3686 阅读 · 0 评论 -
LintCode 删除排序链表中的重复元素
样例给出 1->1->2->null,返回 1->2->null给出 1->1->2->3->3->null,返回 1->2->3->null方法一:很容易就想到一种递归的算法,从头结点head开始,比较head和后一个节点的大小,如果相等,则把后一个节点删掉。然后继续比较头结点和下一个节点。直到head和下一个节点不相同,递归调用函数,比较下一个节点和其后面节点的值。直到原创 2016-04-03 16:04:40 · 546 阅读 · 0 评论 -
LintCode 删除链表中倒数第n个节点
给出链表1->2->3->4->5->null和 n = 2.删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.这个题目相当于在“返回链表倒数第n个节点”的基础上增加功能,通过上一篇文章,我们已经有了寻找倒数第n个节点的方法。这里我们只提供遍历一次的方法,遍历2次也是这个道理。删除的关键在于要找原创 2016-03-31 18:58:06 · 2459 阅读 · 0 评论