java
文章平均质量分 50
two_star
Email:xingxin.hsing@gmail.com
Blog:https://twostarxx.github.io/
展开
-
位运算(Java)
1.位运算Java中常用位运算符号包括:操作符描述&如果对应位都是1,则结果为1,否则为0|如果对应位都是0,则结果为0,否则为1^如果对应位相同,则结果为0,否则为1~对运算符翻转每一位,即0变成1,1变成0<<按位左移运算符。左操作数按位左移右操作数指定的位数。>>按位右移运算符。左操作数原创 2018-12-18 11:23:55 · 773 阅读 · 0 评论 -
《剑指offer》面试题41:和为s的两个数字 VS 和为s的连续正数序列
题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。思路:以{1, 2, 4, 7, 11, 15}和15为例进行讲解。定义两个指针,第一个指向0,第二个指向最后一个。...原创 2018-05-28 17:10:34 · 186 阅读 · 0 评论 -
《剑指offer》面试题33:把数组排成最小的数
题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3, 32, 321},则打印出这3个数字能排成的最小数字321323。理论基础:数组排列后拼接的数字最小,则内部任意两个拼接的数字最小。因此,只需要比较数组中任意两个的大小。思路:外部采用快排(logn),进行比较;内部的比较采用 (str1+str2) ? (str2+str1)。标...原创 2018-05-16 17:49:34 · 139 阅读 · 0 评论 -
《剑指offer》面试题32:从1到n整数中k出现的个数
题目:输入一个整数m,求从1到n这n个整数的十进制表示中k出现的次数。例如输入一个12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次。思路:分别统计k出现在个位,十位,百位,千位...的个数。n = 2593, x = 5 为例来解释如何得到数学公式。从 1 至 2593中,数字 5 总计出现了 813 次,其中有 259次出现在个位,260次出现在十位,294次出现在...原创 2018-05-16 15:41:48 · 905 阅读 · 0 评论 -
《剑指offer》面试题36:数组中的逆序对
题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。思路:归并排序思想。...原创 2018-05-22 21:14:50 · 254 阅读 · 0 评论 -
《剑指offer》面试题38:数组在排序数组中出现的次数
题目:统计一个数字在排序数组中出现的次数。例如输入排序数组{1, 2, 3, 3, 3, 3, 4, 5}和数字3,由于3在这个数组中出现了4此,因此输出4。思路:因为输入的数组为排序的,第一反应是二分查找。先二分查找k第一次出现的位置,再二分查找k最后出现的位置,进而位置相减+1。public int getNumK(int[] nums, int k) { int first =...原创 2018-05-25 18:29:02 · 160 阅读 · 0 评论 -
《剑指offer》面试题31:连续子数组的最大和
题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。思路一:对所有的数进行遍历。先判断之前的和是否为负,如果为负,置为0。加上当前值。判断是否为最大。思路二:动态规划。以第i个数结尾的最大和 = 第i个数 + 以第i-1个数结尾的最大和。(递归用循环实现,所以思路一实现与思路一相同)public int fin...原创 2018-05-12 18:35:23 · 137 阅读 · 0 评论 -
《剑指offer》面试题37:两个链表的第一个公共结点
题目:输入两个链表,找出它们的第一个公共结点。思路:计算两个链表的长度。用 k 走完长链表多出的长度,然后长短链表同时遍历,如果两个index相同,则该点为第一个公共结点。public static ListNode FistCommonNode(ListNode node1, ListNode node2) { if (node1 == node2) return node1; int ...原创 2018-05-17 17:50:02 · 164 阅读 · 0 评论 -
《剑指offer》面试题35:第一个只出现一次的字符
题目:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出'b'。思路:用哈希表记录每个char出现的次数。顺序哈希表用 LinkedHashMap。public char FirstNotRepeatChar(String str) { HashMap<Character, Integer> map = new LinkedHashMap<Charact...原创 2018-05-17 17:13:09 · 138 阅读 · 0 评论 -
《剑指offer》面试题34:丑数
题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如1、2、3、4、5都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做第一个丑数。...原创 2018-05-17 16:58:41 · 141 阅读 · 0 评论 -
《剑指offer》面试题26:复杂链表的复制
题目:请实现一个函数用于复制一个复杂链表。在复杂链表中,每个结点除了有一个next指针指向下一个结点外,还有一个sibling指向链表中的任意结点或者null。方法一:时间O(n)。分为三个步骤。在每一个结点后面复制一个只包含next指针不含sibling的相同的结点。一次遍历O(n)复制结点的sibling指针,其中复制的结点指向的复制的结点。一次遍历O(n)分割链表。一次遍历O(n),难点注意...原创 2018-03-21 19:11:32 · 201 阅读 · 0 评论 -
《剑指offer》面试题42:翻转单词顺序VS左旋转字符串
题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student.",则输出"student. a am I"。思路:以"I am a student."为例,翻转整个句子。例子为,".tneduts a ma I"。以空格为界,翻转单个单词。需要辅助方法去翻转void ...(char[], int st...原创 2018-05-28 18:22:56 · 170 阅读 · 0 评论 -
《剑指offer》面试题43:n个骰子的点数
题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出k的所有可能的值出现的概率。思路:基于循环求骰子点数,时间性能好。在一次循环中,第一个数组中的第n个数字表示骰子和为n出现的次数。在下一次循环中,我们加上一个新的骰子,此时和为n的骰子出现的次数等于上一次循环中骰子点数和为n-1、n-2、n-3、n-4、n-5和n-6的次数的总和,所以我们把另一个数组的第n个数字设为前一个数组...原创 2018-05-30 15:41:23 · 501 阅读 · 0 评论 -
面向高级对象开发
创建和销毁对象基本原则构造方法 vs. 静态工厂方法构造方法:Fragment fragment = new MyFragment();// orDate date = new Date();静态工厂方法:Fragment fragment = MyFragment.newIntance();// or Calendar calendar = Calendar.getInst...原创 2018-11-12 21:06:59 · 208 阅读 · 0 评论 -
Maven项目框架构建
运行环境jdk: 1.8mysql: 5.7mysql-connector-java: 8.0 (手动配置)hibernate: 5.2.17 (手动配置)1、最外层test项目File -> New -> Project -> 左侧选择Maven,右侧选择项目的SDK,点击Next 。设置项目名字及位置。2、生成dao层File -&...原创 2018-09-28 15:56:41 · 2567 阅读 · 0 评论 -
Partition总结
partition是快速排序的核心。目的:将数组划分为<=pivot和>pivot两部分,或者是<pivot和>=pivot。实现:单向扫描,或者双向扫描。方法一:单向扫描思路:两个指针,i 用来遍历数组,与pivot进行比较;small用来记录小于pivot的位置+1。for (i),当 i 的值小于pivot时,将其与small的值进行交换,small+...原创 2018-08-03 13:42:48 · 167 阅读 · 0 评论 -
《剑指offer》面试题19:二叉树的镜像
题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。方法一:递归思路:去掉空树、单节点的情况,将左子树临时保存,右子树赋值给左子树,递归进行交换。public static void MirrorRecursively(TreeNode root) { if (root == null) return ; if (root.left == null &&...原创 2018-08-02 21:59:57 · 923 阅读 · 0 评论 -
《剑指offer》面试题44:扑克牌的顺子
题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。思路:将大小王设置为0。将5张牌进行排序,计算连续两数直接的空数值有多少个,与0的个数进行比较。如果 > 0的个数,则说明0无法全部填充,不是连续序列;否则,即<=,是连续。public boolean isContin...原创 2018-08-06 21:50:36 · 206 阅读 · 0 评论 -
《剑指offer》面试题41:和为s的两个数字 VS 和为s的连续正数序列
和为s的两个数字题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。思路:由于是递增排序数组,所以考虑两个指针遍历,i 指针从头开始,j 指针从尾开始。如果 i 数和 j 数之和 > target,将 j 指针前移;如果小于target,将 i 指针后移。找到相等则return,找不到即(i=j-1 &am...原创 2018-08-06 21:46:46 · 256 阅读 · 0 评论 -
《剑指offer》面试题18:树的子结构
题目:输入两棵二叉树A和B,判断B是不是A的子结构。思路:分成两步在树A中找到和B的根节点的值一样的节点R; 判断树A中以R为根节点的子树是不是包含和树B一样的结构。因此有两个函数,函数1遍历树A找到等于rootB的节点,函数2比较 “rootA” 是否包含 “rootB”。// 找到tree1中等于tree2的root值相等的节点public static boolean h...原创 2018-08-01 20:57:32 · 151 阅读 · 0 评论 -
《剑指offer》面试题6:重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结构,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中不含重复的数字。例如输入前序遍历序列{1, 2, 4, 7, 3, 5, 6, 8}和中序遍历序列{4, 7, 2, 1, 5, 3, 8, 6},则重建出下图所示的二叉树并输出它的头结点。思路:在二叉树的前序遍历序列中,第一个数字总是树的根节点的值。但在中序遍历序列中,根节点的值在序列的中...原创 2018-07-23 17:40:04 · 257 阅读 · 0 评论 -
《剑指offer》面试题12:打印1到最大的n位数
题目:输入数字n,按顺序打印出从1最大 n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。易错点:由于没有规定n的范围,所以当输入的n很大的时候,直接使用int或者long会导致溢出。因此,涉及大数问题,必须使用String。思路:在字符串上模拟数字加法。以n=3为例,模拟加法时存在的几种情况:将字符串设置成char[n+1],便于打印和自增。(+1的原因会在后面...原创 2018-07-23 18:09:17 · 183 阅读 · 0 评论 -
《剑指offer》面试题4:替换空格
题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy. ”,则输出“We%20are%20happy.%20”。思路:StringBuffer类的使用首先,遍历一次字符串,统计出字符串中空格的总数,每替换一次空格,长度增加2,计算出替换之后字符串的总长度。声明两个指针,以“We are happy. ”为例,指针分别为13和16,从后往前复制,直到...原创 2018-06-19 13:41:43 · 136 阅读 · 0 评论 -
《剑指offer》面试题29:数组中出现次数超过一半的数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4, 2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。解法一:根据数组特点找出O(n)的算法思路:数组中有一个数字出现的次数超过数组长度的一半,也就是说它出现的次数比其他所有数字出现的次数的和还要多。在遍历数组的时候保存两个值:一个是数组中的...原创 2018-03-30 18:40:45 · 127 阅读 · 0 评论 -
《剑指offer》面试题25:二叉树中和为某一值的路径
题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路:用栈记录路径,sum记录当前和。如果是叶结点,判断sum是否等于target,如果等于则输出。help的方法最后需要将栈顶弹出,sum-=。public static void findPath(TreeNode root, int target)...原创 2018-03-20 13:30:07 · 218 阅读 · 0 评论 -
《剑指offer》面试题3:二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:每一次都是选取数组查找范围的右上角数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。也就是说如果要查找的数字不在数组的右上角...原创 2018-03-01 22:43:37 · 136 阅读 · 0 评论 -
《剑指offer》面试题17:合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。思路:使用递归,将未排序的两个链表继续添加到next上。方法一:递归public ListNode merge(ListNode head1, ListNode head2) { if (head1 == null) return head2; if (head2 == null) return hea...原创 2018-03-14 22:25:41 · 165 阅读 · 0 评论 -
LintCode: 114. 不同的路径 Java
题目大意有一个机器人的位于一个 m × n 个网格左上角。 机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。 问有多少条不同的路径?原创 2017-12-04 21:30:10 · 251 阅读 · 0 评论 -
LintCode: 109. 数字三角形 Java
题目大意给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。原创 2017-12-04 16:03:19 · 663 阅读 · 0 评论 -
二叉树:前序,后序,中序遍历(递归+非递归);层次(队列)
二叉树遍历原创 2017-10-30 21:07:00 · 391 阅读 · 0 评论 -
JAVA集合类
Java集合类原创 2017-10-19 22:51:44 · 209 阅读 · 0 评论 -
LintCode: 28. 搜索二维矩阵 Java
搜索二维矩阵:searchMatrix(int[][] matrix, int target)原创 2017-10-28 19:40:59 · 363 阅读 · 0 评论 -
Eclipse+Tomcat+mysql开发第一个Java Web项目
Java Web项目:登录。原创 2017-10-27 23:48:25 · 4298 阅读 · 0 评论 -
排序算法
package practice;/** * @version 2017.10.1 * @author XINGXIN * */public class Sort { /** * <p>选择排序O(n^2).<br> * @param nums: int[]. * @return nums. */ public int[] selec原创 2017-10-01 20:35:54 · 208 阅读 · 0 评论 -
《剑指offer》面试题5:从尾到头打印链表
题目:输入一个链表的头节点,从尾到头反过来打印出每个节点的值。思路:遍历的顺序是从头到尾的顺序,可输出的顺序确实从尾到头。这就是典型的“后进先出”,我们可以用栈实现这种顺序。 想到用栈实现函数,而递归在本质上就是一个栈结构,于是同样可以采用递归来实现。// 栈实现public void printListReversingly(ListNode root) { Lis...原创 2018-03-03 14:56:23 · 114 阅读 · 0 评论 -
《剑指offer》面试题9:斐波那契数列
题目一:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项,斐波那契数列的定义如下:思路:不要写递归,时间复杂度太高。public int Fibonacci(int num) { int n1 = 0, n2 = 1, i = 2; if (num == 0) return n1; if (num == 1) return n2; while (i < num...原创 2018-03-04 15:27:20 · 157 阅读 · 0 评论 -
《剑指offer》面试题24:二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数组都互不相同。概念:二叉搜索树,左子树都小于根结点,右子树都大于根结点。思路:遍历end前面的结点,通过左子树都小于根结点找到分界点,判断右子树是否都大于根结点(return false)。对树的左右子树进行递归。public static boo...原创 2018-03-20 13:26:20 · 142 阅读 · 0 评论 -
《剑指offer》面试题16:反转链表
题目:定义一个链表的头结点,反转该链表并输出反转后链表的头结点。思路:定义三个指针:中心结点的前结点(记录next需要转移到的位置),中心结点,中心结点(暂存,防止链表断裂)。将中心结点的next指针设置为中心结点的前结点。特殊情况:空链表。两个结点。注意:修改完后,head的next指针置空。最后一个节点的next指针置为前一个结点。public static ListNode reverseL...原创 2018-03-13 23:21:12 · 162 阅读 · 0 评论 -
《剑指offer》面试题15:链表中倒数第k个节点
题目:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如一个链表有6个节点,从头节点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。特殊情况:空链表。倒数第0个节点。k大于链表长度。public static ListNode findKthToTail(ListNode head, int k...原创 2018-03-13 23:00:06 · 151 阅读 · 0 评论 -
《剑指offer》面试题14:调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。思路:两个指针,一个从头,一个从尾。交换头指针的偶数与尾指针的奇数。注意:length<=2的情况,所以 j-i>=1,存在等号。public void reorderOddEven(int[] nums) { int i=0, j=nums.len...原创 2018-03-13 22:26:52 · 96 阅读 · 0 评论