
刷题
婷小花
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Java】剑指offer——第一个出现一次的字符
1、思路概述:题目:找出一个字符串中第一个出现一次的字符。思路:我们可以使用LinkedHashMap的两个特性(有序,键值对)来解决这个问题。2、代码实现:public static int FirstNotRepeatingChar(String str) {if(str==null||str.length()==0){ return -1; }char[] ...原创 2019-07-19 09:43:15 · 218 阅读 · 0 评论 -
剑指Offer——输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个
1、思路概述:题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个例如:输入{3,5,1,0},则输出{0135}.这种题目其实十分简单,首先建立一个和原数组一样大的String[] ,用ArrayList中自带的sort方法进行排序后,小的放前面,大的放后面,输出结果。此题中需要注意的是一系列的加包拆包操作。2、代码实现:public st...原创 2019-10-29 16:56:04 · 5406 阅读 · 4 评论 -
【Java】剑指Offer——打印一个数组的全排列
1、思想概述:什么是数组的全排列?比如,输入一个abc,此时它的全排列应该是abc、acb、bac、bca、cba、cab此时我们要做到的是,首先在a确定不动的情况下分别将b c进行挪动。然后再将交换,保持b不动挪动a c。2、代码实现如下:package com.company.shuzu;import java.util.Scanner;public class Shu {...原创 2019-10-29 16:56:48 · 811 阅读 · 0 评论 -
【Java】剑指Offer——找出数组中出现次数超过数组长度一半的数字
1、思想概述:首先,我们默认这个数组是未经过排序的无序数组。要找出在数组中长度超过一半的数字,那么我们可以先将数组进行排序处理,排序完成后取到数组的中间下标,然后返回该数,则此数一定是要求的数字。在这里我用了冒泡排序,效率比较低,想要进行优化可以换一种排序方式。2、代码实现:import java.util.Arrays;import java.util.Scanner;public...原创 2020-02-25 11:22:55 · 482 阅读 · 0 评论 -
【Java】剑指offer约瑟夫环
1、题目概述:设计这样一个游戏,共有N人围成圆圈,设定一个数字m,从第一个人开始报号,报到m的退出游戏,余下的人继续报号,以此往复,直到剩下最后一个人即为胜者。2、代码实现:public class YueSefu { public static void main(String[] args) { int[] arr={1,2,3,4,5,6,7,8,9,10,11...原创 2019-07-15 20:55:21 · 168 阅读 · 0 评论 -
【Java】剑指offer——连续子数组的最大和
**题目:**输入一个整形数组,数组里有正数也有负数。数组中一个或连续多个正数组成一个子数组。求左右子数组和的最大值。要求时间复杂度为O(n).**例如:**若输入数组为{1,-2,3,10,-4,7,2,-5} 则它的最大和子数组为{3,10,-4,7,2},和为18思路解析:我们此时首先应该从数组起始位置开始遍历,且只能遍历一次(要求了时间复杂度),所以我们先定义一个sum和一个最大值m...原创 2020-02-25 11:23:10 · 306 阅读 · 0 评论 -
【Java】BST树经典问题——镜像翻转
1、理论概述:BST树的镜像翻转,顾名思义,即把左子树变成右子树,左节点变成右节点。2、代码实现: public void mirror() { System.out.println("镜像翻转"); mirror(this.root); System.out.println(); }public void mirror(BSTNode<T> ...原创 2019-07-10 14:12:55 · 293 阅读 · 0 评论 -
【Java】剑指Offer——判断一个数组压栈后的弹栈顺序
1、思想概述:首先,例如我们此时给定一个数组**{1,2,3,4,5},将该数组按顺序进行压栈操作,在进行弹栈操作,若得到的弹栈数组为{4,5,3,2,1}则为正确,若为{4,3,5,1,2}**则不是该数组的弹栈序列。当我们按顺序压入1,2,3时,压到4然后直接弹出再压入5,即得到{4,5,3,2,1};而我们无论如何压栈,也不可能将1出在2的前面,故第二个数组不可能为弹栈数组。2、代码实...原创 2019-07-10 16:55:59 · 224 阅读 · 0 评论 -
【Java】剑指offer——输出一个十进制转二进制中1的个数
1、思路概述:在这里我们用到了按位与运算&。如,若要求n转二进制后的1的个数,那么我们将n和n-1进想按位与运算后对n进行更新,每更新一次1的个数就+1,最终得到1的个数。2、代码实现:public static void main(String[] args) {int n=21;}public static int find1(int n){/*将十进制数转换成二进制数后...原创 2020-02-25 11:22:44 · 802 阅读 · 0 评论 -
【Java】剑指offer——整数n中出现的次数
public static long find1num(int n){long count=0;long i=1;long cur=0,befor=0,after=0;while ((n/i)!=0){ befor=n/(i*10); cur=(n/i)%10; after=n-(n/i)*i; if(cur==0){ count=count...原创 2019-07-11 18:38:03 · 146 阅读 · 0 评论 -
【Java】剑指offer——输出一个可以被分解的整数的分解数
例如:输入一个18 18可被分解为18=233代码实现:public class FenJie { public static int fenjie(int a){ int i=2; for(i=2;i<=a;i++){//从2开始找质数,1是所有数的质数 while (i!=a){//当i!=a的时候 ...原创 2020-02-25 11:21:54 · 392 阅读 · 0 评论 -
【Java】剑指Offer——合并两个有序链表
1、思路概述:首先要明确的是当我们合并完两个有序链表后,新的链表也依旧还是要有序。所以,我们首先要定义两个指针分别对两个链表进行遍历,再定义一个指针从空开始存储两个链表中挑选出来的数字。当一个链表为空时,将剩下的一个链表全部输入即可。2、代码实现:public void merge(Link<T> link){Link<T> link1=new Link<&g...原创 2020-02-25 11:21:46 · 344 阅读 · 3 评论 -
【Java】leetcode——Next Permutation(下一个字典数)
1、思路概述:首先要搞清楚字典数是什么:即若有1234那么它的字典数顺序应该是,1234,1243,1324,1342,1423,1432。。也就是像查字典一样a在前,b在后。2、代码实现:public static void reverse(int []nums,int l,int r){ while(l<r){ int tmp=nums[l...原创 2019-07-16 09:44:12 · 182 阅读 · 0 评论 -
【Java】剑指offer——替换字符串中的空格使其成20%
1、思路概述:首先,我们拿到这道题要考虑的是如果要在当前的数组上将空格替换,那么必定会溢出。所以我们采用了以下几种方法把空格数先计算出来,然后对数组进行扩容,再在数组尾部定义一个指针从尾部开始后移(不用再将每个字符串向后覆盖了),然后遇到空格用20%替换,结束;但是上面的方法虽然看起来简单但是要对数组遍历两边,影响了程序的时间复杂度;优解:因为此处是单线程,所以用StringBulider...原创 2020-02-25 11:21:10 · 379 阅读 · 0 评论 -
【Java】剑指offer——两个链表的第一个公共节点
题目:求两个链表的第一个公共节点1、思路概述:要找两个链表的公共节点首先要知道链表的长度,那么我们首先就要遍历两个链表,的到链表长度后,若长链表长m短链表长n,那么就要让长链表先比锻炼表走m-n步,开始遍历,值相同后进行返回,的到解。但是上面这种方法需要两次遍历链表,效率不是很理想。我们可以利用HashMap的特性,将链表1的值存到HashMap中,然后再调用contains方法对链表2的值...原创 2020-02-25 11:20:57 · 248 阅读 · 2 评论 -
【Java】剑指offer——有规律的二维数组查找目标数字
1、思路概述:题目:有这样一个二维数组,它的行从左到右皆递增,列从上到下也递增,现查找这样一个目标数字,若二维数组中有此数字则返回true,没有就返回false。**思路:**首先我们可以建立一个这样的二维数组,从右上或左下开始查找,这样一次就可以排除一个行列,比直接使用二分查找要更加方便,2、代码实现:public static boolean find(int[][] array,in...原创 2019-10-29 16:56:37 · 257 阅读 · 0 评论 -
leetcode——最长回文(马拉车)
1、思想概述:求最大回文长度,例如,adfaddddaerg中,可以把构成回文的就是adddda,故此字符串的最大回文长度为6.回文:即一个字符串正着反着读都一样的,如上面说的adddda或noon等.当我们求解此问题时,首先会想到暴力的遍历数组,枚举数组中所有字串,然后再进行比较,但是这样做它的时间复杂度达到了O(n^3),十分不理想,所里这里提出了马拉车算法解决这个问题,可以将时间复杂度...原创 2020-02-25 11:21:38 · 494 阅读 · 0 评论