![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法研究
bleuesprit
这个作者很懒,什么都没留下…
展开
-
leetcode 9. 回文数
https://leetcode-cn.com/problems/palindrome-number/class Solution { public boolean isPalindrome(int x) { if (x < 0) { return false; } if (x == 0) { return true; } int n = (int) Math.log10(x原创 2020-07-06 23:56:31 · 169 阅读 · 0 评论 -
leetcode 8. 字符串转换整数 (atoi)
https://leetcode-cn.com/problems/string-to-integer-atoi/class Solution { public int myAtoi(String str) { str = str.trim(); char[] cArr = str.toCharArray(); if(cArr.length<1){ return 0; } boolean p原创 2020-07-06 23:38:19 · 203 阅读 · 0 评论 -
leetcode 7. 整数反转
https://leetcode-cn.com/problems/reverse-integer/class Solution { public int reverse(int xx) { if (xx == 0) { return xx; } boolean minus = false; long x = xx; if (xx < 0) { mi原创 2020-07-06 23:07:36 · 347 阅读 · 0 评论 -
leetcode6. Z 字形变换
https://leetcode-cn.com/problems/zigzag-conversion/心得:耗时2小时多主要是找到每一个计算单元的起点,每个计算单元可以看成是一竖行+后面的斜坡。竖行坐标 基点+行数斜坡坐标 下一行基点-行数由于第一行和最后一行比较特殊第一行:下一行基点-行数 得到的是下一个单元要计算的点,因为行数是0最后一行:下一行基点-行数 得到的是竖行的值,不是斜坡的值。所以要第二个加字母的操作要排掉第一行和最后一行class Solution {原创 2020-07-05 18:37:43 · 138 阅读 · 0 评论 -
leetcode 5最长回文子串
https://leetcode-cn.com/problems/longest-palindromic-substring/class Solution { public String longestPalindrome(String s) { if (s.length() < 1) { return s; } int[][] map = new int[s.length()][s.length()];原创 2020-07-04 17:18:28 · 89 阅读 · 0 评论 -
小米 懂二进制
题目描述世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子: 1999 2299输出例子: 7class Solution {public: /** * 获得两个整形二进制表达位数不同的数量 * * @param m 整数m * @param n 整数n原创 2016-04-22 22:56:31 · 391 阅读 · 0 评论 -
寻找Coder
请设计一个高效算法,再给定的字符串数组中,找到包含”Coder”的字符串(不区分大小写),并将其作为一个新的数组返回。结果字符串的顺序按照”Coder”出现的次数递减排列,若两个串中”Coder”出现的次数相同,则保持他们在原数组中的位置关系。 给定一个字符串数组A和它的大小n,请返回结果数组。保证原数组大小小于等于300,其中每个串的长度小于等于200。同时保证一定存在包含coder的字符串。原创 2016-05-20 10:57:11 · 304 阅读 · 0 评论 -
风口的猪-中国牛市
题目描述风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<原创 2016-05-20 11:23:52 · 437 阅读 · 0 评论 -
拜访
题目描述现在有一个城市销售经理,需要从公司出发,去拜访市内的商家,已知他的位置以及商家的位置,但是由于城市道路交通的原因,他只能在左右中选择一个方向,在上下中选择一个方向,现在问他有多少种方案到达商家地址。 给定一个地图map及它的长宽n和m,其中1代表经理位置,2代表商家位置,-1代表不能经过的地区,0代表可以经过的地区,请返回方案数,保证一定存在合法路径。保证矩阵的长宽都小于等于10。 测试原创 2016-05-21 11:03:37 · 516 阅读 · 0 评论 -
直方图内最大矩形
题目描述有一个直方图,用一个整数数组表示,其中每列的宽度为1,求所给直方图包含的最大矩形面积。比如,对于直方图[2,7,9,4],它所包含的最大矩形的面积为14(即[7,9]包涵的7x2的矩形)。 给定一个直方图A及它的总宽度n,请返回最大矩形面积。保证直方图宽度小于等于500。保证结果在int范围内。 测试样例: [2,7,9,4,1],5 返回:14这个题有点意思。首先一点思想就是,如果原创 2016-05-21 17:03:43 · 383 阅读 · 0 评论 -
字符串计数
题目描述求字典序在s1和s2之间的,长度在len1到len2的字符串的个数,结果mod 1000007。输入描述: 每组数据包涵s1(长度小于100),s2(长度小于100),len1(小于100000),len2(大于len1,小于100000)输出描述: 输出答案。输入例子: ab ce 1 2输出例子: 56这个题目我做了半天。后来发现是很简单的。其实可以想象成26进制问题,然后看看两原创 2016-05-22 11:48:58 · 1059 阅读 · 0 评论 -
钓鱼比赛
题目描述ss请cc来家里钓鱼,鱼塘可划分为n*m的格子,每个格子每分钟有不同的概率钓上鱼,cc一直在坐标(x,y)的格子钓鱼,而ss每分钟随机钓一个格子。问t分钟后他们谁至少钓到一条鱼的概率大?为多少?输入描述: 第一行五个整数n,m,x,y,t(1≤n,m,t≤1000,1≤x≤n,1≤y≤m); 接下来为一个n*m的矩阵,每行m个一位小数,共n行,第i行第j个数代表坐标为(i,j)的格子钓到原创 2016-05-22 12:46:50 · 522 阅读 · 0 评论 -
蘑菇阵
题目描述现在有两个好友A和B,住在一片长有蘑菇的由n*m个方格组成的草地,A在(1,1),B在(n,m)。现在A想要拜访B,由于她只想去B的家,所以每次她只会走(i,j+1)或(i+1,j)这样的路线,在草地上有k个蘑菇种在格子里(多个蘑菇可能在同一方格),问:A如果每一步随机选择的话(若她在边界上,则只有一种选择),那么她不碰到蘑菇走到B的家的概率是多少?输入描述: 第一行N,M,K(2 ≤ N原创 2016-05-22 16:02:59 · 263 阅读 · 0 评论 -
搬桌子
题目描述现在有一张半径为r的圆桌,其中心位于(x,y),现在他想把圆桌的中心移到(x1,y1)。每次移动一步,都必须在圆桌边缘固定一个点然后将圆桌绕这个点旋转。问最少需要移动几步。输入描述: 一行五个整数r,x,y,x1,y1(1≤r≤100000,-100000≤x,y,x1,y1≤100000)输出描述: 输出一个整数,表示答案输入例子: 2 0 0 0 4输出例子: 1这种类型的题第一原创 2016-05-22 16:23:01 · 556 阅读 · 0 评论 -
leetcode Longest Increasing Subsequence
题目链接动态规划。算法复杂度n平方public class Solution { public int lengthOfLIS(int[] nums) { if(nums.length==0) { return 0; } int record[]=new int[nums.length];原创 2016-05-31 11:47:32 · 229 阅读 · 0 评论 -
相邻最大差值
题目描述请设计一个复杂度为O(n)的算法,计算一个未排序数组中排序后相邻元素的最大差值。 给定一个整数数组A和数组的大小n,请返回最大差值。保证数组元素个数大于等于2小于等于500。 测试样例: [9,3,1,10],4 返回:6通过的代码import java.util.Arrays;import java.util.LinkedList;import java.util.List;p原创 2016-03-23 21:26:50 · 790 阅读 · 0 评论 -
只出现一次的数其他都出现两次
只有一个这样的数这个问题很简单。直接抑或就好。因为其他的数字都是出现两次的,异或出来是零,那么只有这个数组出来是自己。有两个这样的数这个问题不能通过简单的异或处理。那么可以这样分组.如果能把大的数字分成两个组,并且其余的出现两次的数字也都在这一组。那么就分成了两个问题一。。 关键在于如何分组。我们还是从头到尾依次异或数组中的每一个数字,那么最终得到的结果就是两个只出现一次的数字的异或结果。因为其他原创 2016-04-05 16:10:48 · 361 阅读 · 0 评论 -
pat数组元素循环右移问题
一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……AN-1)变换为(AN-M …… AN-1 A0 A1……AN-M-1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?输入格式:每个输入包含一个测试用例,第1行输入N ( 1=0);第2行输入N个整数原创 2015-04-19 10:51:42 · 553 阅读 · 0 评论 -
《编程珠玑》笔记一
编程珠玑。关于寻找最大相加连续自串输入 31 -41 59 26 -53 58 97 -93 -23 84输出187 原因 59 26 -53 58 97相加的和为187算法分治算法。分治算法并不稀奇,快速排序,归并排序就是一个典型的分治算法。分治算法总是和递归有着离不开的关系。分治算法最简单的问题已经是一个可直接求解的问题。比如排序分治到最后就剩一个数,那么一个数原创 2015-04-15 14:20:45 · 411 阅读 · 0 评论 -
计算机随机数初探
研究过随机数吗?我们都知道电脑里面的随机数其实只是看上去是随机的,产生的过程都是确定的。如果我们有一定的破解能力,我们就能预测得到,下一次机器产生的随机数是哪个值。在c++编程中,我们总要放一个随机种子,这个种子一般是当前时间,这样我们可以看到每次调用的随机数工厂产生的数值是不一样的。如果我们把随机数种子设定为一个特定的数,那么产生的随机数也是固定的。这样有一个好处,就是方便调试,因为调试的时原创 2015-04-26 10:46:42 · 764 阅读 · 0 评论 -
leetcode Binary Tree Level Order Traversal
题目链接链接思想:广度优先算法/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public clas原创 2015-05-29 21:57:00 · 301 阅读 · 0 评论 -
推荐几个oj
这篇文章的水平很低。最主要的作用是为了防止我忘记了这两个oj,做一个备份而已。因为国内的oj很多提供的测试用例都是很少的。就那几个sample input,程序出错也不会告诉你什么原因。所以,一旦程序出错只能干瞪眼(我经常就是这样),想当打击学习的积极性。下面我推荐3个比较好的oj,会告诉你那里出错。1leetcode(亲测)这个是每一次给你一个出错的测试用例。你可以一步一步的改你的程原创 2015-04-05 10:59:11 · 2676 阅读 · 0 评论 -
编程之美 最长连续字符
编程之美的一道题 写一个递归算法。求出字符串最长的连续字符的长度。例如“aaaabbbcc”输出4..”ab”输出1import java.lang.reflect.Array;import java.util.Arrays;import java.util.HashMap;public class Solution { public static void main(String a原创 2016-03-07 16:50:37 · 312 阅读 · 0 评论 -
常量空间把一个二叉树变成链表
import java.lang.reflect.Array;import java.util.Arrays;import java.util.HashMap;import javax.swing.tree.TreeNode;public class Solution { static treeNode last=null; public static void main(Strin原创 2016-03-07 18:19:57 · 259 阅读 · 0 评论 -
旋转打印矩阵。这个题目我见过很多次都是放弃了。
题目描述对于一个矩阵,请设计一个算法从左上角(mat[0][0])开始,顺时针打印矩阵元素。 给定int矩阵mat,以及它的维数nxm,请返回一个数组,数组中的元素为矩阵元素的顺时针输出。 测试样例: [[1,2],[3,4]],2,2 返回:[1,2,4,3]class Printer {public: vector<int> clockwisePrint(vector<vect原创 2016-03-20 16:34:12 · 542 阅读 · 0 评论 -
折纸问题
题目描述请把纸条竖着放在桌⼦上,然后从纸条的下边向上⽅对折,压出折痕后再展 开。此时有1条折痕,突起的⽅向指向纸条的背⾯,这条折痕叫做“下”折痕 ;突起的⽅向指向纸条正⾯的折痕叫做“上”折痕。如果每次都从下边向上⽅ 对折,对折N次。请从上到下计算出所有折痕的⽅向。 给定折的次数n,请返回从上到下的折痕的数组,若为下折痕则对应元素为”down”,若为上折痕则为”up”. 测试样例: 1 返回:原创 2016-03-20 16:54:10 · 575 阅读 · 0 评论 -
链表的回文结构
题目描述对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。 测试样例: 1->2->2->1 返回:true/*struct ListNode { int val; struct ListNode *next; List原创 2016-03-20 18:08:35 · 457 阅读 · 1 评论 -
构造MaxTree
题目描述对于一个没有重复元素的整数数组,请用其中元素构造一棵MaxTree,MaxTree定义为一棵二叉树,其中的节点与数组元素一一对应,同时对于MaxTree的每棵子树,它的根的元素值为子树的最大值。现有一建树方法,对于数组中的每个元素,其在树中的父亲为数组中它左边比它大的第一个数和右边比它大的第一个数中更小的一个。若两边都不存在比它大的数,那么它就是树根。请证明这个方法的正确性,同时设计O(n)原创 2016-03-20 21:37:22 · 606 阅读 · 0 评论 -
用递归函数和栈操作逆序栈
题目描述一个栈依次压入1,2,3,4,5那么从栈顶到栈底分别为5,4,3,2,1。将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现了栈中元素的逆序,请设计一个算法实现逆序栈的操作,但是只能用递归函数来实现,而不能用另外的数据结构。 给定一个栈Stack以及栈的大小top,请返回逆序后的栈。 测试样例: [1,2,3,4,5],5返回:[5,4,3,2,1]import java.u原创 2016-03-20 21:46:31 · 779 阅读 · 0 评论 -
腾讯笔试题 生成格雷码
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。 给定一个整数n,请返回n位的格雷码,顺序为从0开始。 测试样例: 1 返回:[“0”,”1”]import java.util.*;public class GrayCode { public String[] getGray(i原创 2016-04-01 18:38:19 · 468 阅读 · 0 评论 -
基本回溯问题
昨天看到面试的问题涉及到八皇后的计算,因为个人感觉八皇后的问题比较难于理解,所以我就看了一个简单的回溯问题给定一个字符串,给出特定数目字母的所有组合。如字符串abcd给定3个长度的组合有abc abd abd bcd 典型的回溯算法我之前有接触过,其实这个问题有点类似于动态规划的问题,就是分为子问题1 用这个字母 在接下来的字符串里面选出 少一个长度的所有组合子问题2 不用原创 2015-03-17 15:49:07 · 422 阅读 · 0 评论