算法
behboyhiex
这个作者很懒,什么都没留下…
展开
-
幂专题
幂专题 1、判断是否为2的幂 class Solution { public: bool isPowerOfTwo(int n) { if(n<=0) return false; return (n&(n-1)) == 0; } }; 2、判断是否为4的幂 方法1 与0x55555555(奇数位全为1) 与 class Solutio...原创 2020-04-14 01:09:14 · 223 阅读 · 0 评论 -
猿辅导2017 求和为0的最长公共子串
题目描述:给定一个一维数组,只有1和-1,实现程序,求和为0的最长子串长度 输入:1 -1 -1 -1 1 1 1 -1 -1 输出:8 思路: 一个变量sum,记录从0到i的和 maxlen 记录和为0最长子串长度 一个字典:key是sum,val是第一次出现sum值的索引i, 当再次出现sum时,用当前i值减去dic[sum] 就是和为0的长度,与maxlen 比较记录最大max...原创 2018-08-26 18:50:45 · 1816 阅读 · 0 评论 -
Leetcode343 Integer Break
Leetcode343 Integer Break动态规划 beat100%memo[i]=max(j*(i-j),max(j*memo[i-j],memo[i]))class Solution { public: int integerBreak(int n) { if(n<1) return 0; vector<int> memo(n+...原创 2018-07-11 21:26:48 · 180 阅读 · 0 评论 -
Leetcode 300 最长递归子序列
Leetcode 300 最长递归子序列给定一个未排序的整数数组,找到最长的递增子序列的长度。例:输入:[10,9,2,5,3,7,101,18] 输出: 4 说明:最长的子序列是[2,3,7,101],因此长度是4。class Solution { public: int lengthOfLIS(vector<int>& nums) { if (nu...原创 2018-06-20 15:04:51 · 616 阅读 · 0 评论 -
打印从A到Z任取三字母的组合
编写程序打印 a 到 z 中任取 3 个元素的组合(比如 打印 a b c ,d y z等) 思路:a - z 每个字母给一个标记 0 或 1 ,1表示在组合,0表示不在,一共16个标记位。 一个变量都不在组合中时,就是 26 个 0 所有变量都在组合中中时,就是 26 个 1把0到26个1看成数字,就是0和(1 << 26) - 1,那么其它的组合,为0 到 (1 <<...原创 2018-06-25 20:27:56 · 1445 阅读 · 0 评论 -
算法-最大的LeftMax与rightMax之差绝对值
算法-最大的LeftMax与rightMax之差绝对值给定一个长度为N的整型数组arr,可以划分成左右两个部分:左部分arr[0..K],右部分arr[K+1..arr.length-1],K可以取值的范围是[0,arr.length-2]求这么多划分方案中,左部分中的最大值减去右部分最大值的绝对值,最大是多少? 例如: [2,7,3,1,1]当左部分为[2,7],右部分为[3,1,1]时,左部分...原创 2018-06-14 11:48:24 · 373 阅读 · 0 评论 -
算法-最短子数组
给定一个无序数组arr,求出需要排序的最短子数组长度。例如:arr = [1,5,3,4,2,6,7]返回4,因为只有[5,3,4,2]需要排序。分析: 这道题思路在于两次遍历,第一次找到左边是否存在比当前位置大的元素,第二次找到右边是否存在比当前位置元素小的,然后相减// 两次遍历,时间复杂度为O(N),第一次找到左边是否存在比当前位置大的元素,第二次找到右边是否存在比当前位置元素小的 // 然...原创 2018-06-14 10:56:27 · 388 阅读 · 0 评论 -
算法-并查集-加边无向图
题目描述:给你一个 n 个点,m 条边的无向图,求至少要在这个的基础上加多少条无向边使得任意两个点可达~ 输入描述:第一行两个正整数 n 和 m 。 接下来的m行中,每行两个正整数 i 、 j ,表示点i与点j之间有一条无向道路。输出描述:输出一个整数,表示答案例 :输入4 2 1 2 3 4输出:1备注:对于100%的数据,有n,m<=100000。#include<iostream...原创 2018-06-14 10:15:01 · 1179 阅读 · 0 评论 -
牛客算法-求约数个数和
题目描述:给个n,求1到n的所有数的约数个数的和输入描述:第一行一个正整数n输出描述:输出一个整数,表示答案例输入:3 输出:5样例解释: 1有1个约数1 2有2个约数1,2 3有2个约数1,3备注:n <= 100000000 #include <iostream> using namespace std; int main() { long i,res,n; c...原创 2018-06-14 09:50:13 · 730 阅读 · 1 评论 -
子数组最大积
问题:给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。例如arr=[-2.5,4,0,3,0.5,8,-1],子数组[3,0.5,8]累乘可以获得最大的乘积12,所以返回12。思路:设置两个变量用来记录以该结点作为乘积结尾的最大值和最小值,每次都是求取上次最大值和最小值与此次结点乘积的最大值最小值代码:// 求子数组累乘的最大乘积 double getMax...原创 2018-06-21 13:53:22 · 253 阅读 · 0 评论 -
局部最小
局部最小问题:给定无序数组arr,已知arr中任意两个相邻的数都不相等,写一个函数,只需返回arr中任意一个局部最小出现的位置即可。思路:1、arr长度为1时,arr[0]是局部最小。 arr的长度为N(N>1)时,如果arr[0]<arr[1],那么arr[0]是局部最小;2、如果arr[N-1]<arr[N-2],那么arr[N-1]是局部最小;3、如果0<i&...原创 2018-06-21 13:42:50 · 536 阅读 · 0 评论 -
找后继节点
找后继节点定义一种新二叉树结构:struct Node{ public: int value; Node *left, *right, *parent; Node(int data):value(data){} }; 假设有一棵Node类型的节点组成的二叉树,树中每个节点的parent指针都正确的指向自己的父节点,头节点的parent指向null。只给一个在二叉...原创 2018-06-21 13:16:44 · 1076 阅读 · 0 评论 -
需要排序的最短子数组的长度
【题目】 给定一个无序数组arr,求出需要排序的最短子数组长度。 例如: arr = [1, 5, 3, 4, 2, 6, 7]返回4,因为只有[5, 3, 4, 2]需要排序。【思路】 双指针 第一次从左向右遍历,找左边比当前位置大的 第二次从右向左遍历,找右边比当前位置小的【代码】int findMinUnSortArray(int *arr ,...原创 2018-06-21 12:45:09 · 1096 阅读 · 0 评论