算法
qq_43919462
这个作者很懒,什么都没留下…
展开
-
50. Pow(x, n)
快速幂。时间空间都为O(logN)注意n值若是Integer.MIN_VALUE的话,取负数的话就会溢出(如java中的byte类型占8位,取值为-128~127,因为100000000表示-128)。常用一个long变量来保存。class Solution { public double myPow(double x, int n) { long N = n; return N>=0?pow(x,N):1.0/pow(x,-N); } p原创 2020-06-11 19:49:40 · 137 阅读 · 0 评论 -
53. 最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。/*class Solution { public int maxSubArray(int[] nums) { int dp[] = new int[nums.l原创 2020-06-07 17:18:27 · 154 阅读 · 0 评论 -
300. 最长上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?用动态规划O(n^2)状态转移方程好难想啊a。。。dp[n-1]—>dp[n]假设我们已经知道了 dp[0…4] 的所有结原创 2020-06-07 17:17:09 · 102 阅读 · 0 评论 -
顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制:0 <= matrix.length <= 1000 <= matrix[i].length <= 100原创 2020-06-05 16:00:39 · 101 阅读 · 0 评论 -
1143. 最长公共子序列
经典的动态规划题,LCS(Longest Common Subsequence)。三步思路明确dp[][]以及其下标i,j的含义,下标i,j分别代表在两个字符串s1和s2的子串的长度,dp[][]表示长为i,j的两个子串的LCS。定义初始化状态。从两串长度为0开始,LCS也为0,但凡i== 0|| j ==0,LCS都是0.定义动态规划方程class Solution { public int longestCommonSubsequence(String text1, String原创 2020-05-20 17:54:03 · 99 阅读 · 0 评论 -
字符串转整数
注意点边界问题,老忽略情况class Solution { public int myAtoi(String str) { int result=0 flag=1; boolean flagg=false; for(int i=0;i<str.length();i++){ char c=str.charAt(i); if(c==' '&&!flagg) continue;原创 2020-05-15 16:15:34 · 81 阅读 · 0 评论 -
6.Z字形变换
class Solution { public String convert(String s, int numRows) { if(numRows < 2) return s; String result=""; int dir=-1,row=0; List<StringBuilder> rows = new ArrayList<StringBuilder>(); //int count=(2*numRo原创 2020-05-10 13:50:40 · 88 阅读 · 0 评论 -
最长回文子串(中心扩散,dp)
题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。思路以前只做过回文数,判断回文数一般是从中间分开,对比前后两半是否一致。开始想的滑动窗口,判断是不是回文,后来发现O(n)肯定是解决不了,暴力的话是O(n3)。一开始动态规划我也没想出一个规划模型,什么...原创 2020-04-24 10:55:38 · 200 阅读 · 0 评论 -
无重复字符的最长子串(滑动窗口)
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例输入: “abcabcbb”输出: 3自己解法不知道滑动窗口,但是想了想用了这种方法,我把得到的不重复的子串存在了String中。这样一来查重的时候就要遍历了。很费时间。而且每次a字符串都要清空,会浪费内存(会不会浪费呢?好像a=“”的时候,被代替的字符串也不会留在堆中了),但循环“+”拼接字符串肯定浪费内存,会产生额外...原创 2020-04-21 21:02:30 · 98 阅读 · 0 评论 -
个位数统计
输入格式:每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。输出格式:对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。输入样例:100311输出样例:0:21:33:1#include<iostream>#include<string.h>using...原创 2020-02-17 17:25:18 · 136 阅读 · 0 评论 -
等差数列
【输入格式】输入的第一行包含一个整数 N。第二行包含 N 个整数 A 1 ,A 2 ,··· ,A N 。(注意 A 1 ∼ A N 并不一定是按等差数列中的顺序给出)【输出格式】输出一个整数表示答案。【样例输入】52 6 4 10 20【样例输出】10#include<iostream>using namespace std;int min0=INT_MAX...原创 2020-02-16 10:53:31 · 271 阅读 · 0 评论 -
蓝桥杯-数的分解
题目把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,一共有多少种不同的分解方法?注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和1001+1000+18 被视为同一种。填空题仔细看看,上年看错题了把0的情况算进去了,然后分没了。所以考试时候把条件列一下也好。正整数 三个数不同 不含2,4#inclu...原创 2020-02-11 12:12:54 · 489 阅读 · 0 评论 -
ALSDS1_11_C:BFS
复习一下BFS,顺便用一下STL的queue给一个图,输出所有节点到节点1的距离如:Sample Input 141 2 2 42 1 43 04 1 3Sample Output 11 02 13 24 1代码如下:#include<iostream>#include<queue>using namespace std;#define ...原创 2020-02-09 20:10:23 · 184 阅读 · 1 评论 -
ALDS1_11_B:DFS
AOJ上的DFS基础题题目就不上了返回两个数组,一个存发现节点的时间,一个存结束查找该节点的时间#include<iostream>using namespace std;#define N 100int graph[N][N];int d[N]; int f[N]; int n;int time;void DFS(int v){ time++; ...原创 2020-02-07 13:59:58 · 194 阅读 · 0 评论 -
ALDS1_11_A:Graph
InputIn the first line, an integer n is given. In the next n lines, an adjacency list Adj[u] for vertex u are given in the following format:u k v1 v2 … vku is vertex ID and k denotes its degree. vi...原创 2020-02-07 11:15:58 · 109 阅读 · 0 评论 -
1318. 或运算的最小翻转次数
给你三个正整数 a、b 和 c。你可以对 a 和 b 的二进制表示进行位翻转操作,返回能够使按位或运算 a OR b == c 成立的最小翻转次数。「位翻转操作」是指将一个数的二进制表示任何单个位上的 1 变成 0 或者 0 变成 1 。例如输入:a = 2, b = 6, c = 5输出:3解释:翻转后 a = 1 , b = 4 , c = 5 使得 a OR b == c...原创 2020-01-14 11:21:56 · 197 阅读 · 0 评论 -
链表相加
俩长度不等那种情况直接把多以的那一列移到返回链表中也麻烦们还得考虑99999的进位,又得写个循环,还不如把null当成0处理,虽然复杂度都一样,但后者代码比较简洁。public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode dummyHead = new ListNode(0); ListNode p = ...原创 2020-01-13 18:39:12 · 133 阅读 · 0 评论 -
7-1最大连续子列和
题目数据1:与样例等价,测试基本正确性;数据2:100个随机整数;数据3:1000个随机整数;数据4:10000个随机整数;数据5:100000个随机整数;输入格式:输入第1行给出正整数K (≤100000);第2行给出K个整数,其间以空格分隔。输出格式:在一行中输出最大连续子列和。如果序列中所有整数皆为负数,则输出0。输入样例:6-2 11 -4 13 -5 -2输出样...原创 2019-12-01 15:32:20 · 143 阅读 · 0 评论 -
单链表的逆转
链表结构typedef int ElementType;typedef struct Node *PtrToNode;struct Node { ElementType Data; PtrToNode Next;};链表逆转List Reverse( List L ){ List p; p = L; L = NULL; //L作为新的逆转链表的空间 Lis...原创 2019-11-24 11:12:10 · 96 阅读 · 0 评论