Java--剑指offer(6)
26.输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- /**
- public class TreeNode {
- int val = 0;
- TreeNode left = null;
- TreeNode right = null;
- public TreeNode(int val) {
- this.val = val;
- }
- }
- */
- public class Solution {
- public TreeNode Convert(TreeNode pRootOfTree) {
- if(pRootOfTree == null)
- return null;
- if(pRootOfTree.left == null && pRootOfTree.right == null)
- return pRootOfTree;
- //使用递归求出根节点的前一个节点
- TreeNode pre = Convert(pRootOfTree.left);
- TreeNode temp = pre;
- //循环求出左子树最右边的节点
- while(temp != null && temp.right != null){
- temp = temp.right;
- }
- if(pre != null){
- temp.right = pRootOfTree;
- pRootOfTree.left = temp;
- }
- TreeNode last = Convert(pRootOfTree.right);
- if(last != null){
- pRootOfTree.right = last;
- last.left = pRootOfTree;
- }
- return pre != null ? pre : pRootOfTree;
- }
- }
27.输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
输入描述:
- 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
- import java.util.ArrayList;
- import java.util.Collections;
- public class Solution {
- public ArrayList<String> Permutation(String str)
- {
- ArrayList<String> res=new ArrayList<String>();
- if(str.length()==0||str==null)
- return res;
- int n= str.length();
- helper(res,0,str.toCharArray());
- Collections.sort(res);
- return res;
- }
- public void helper( ArrayList<String> res,int index,char []s)
- {
- if(index==s.length-1)
- res.add(new String(s));
- for(int i=index;i<s.length;i++)
- {
- if(i==index||s[index]!=s[i])
- {
- swap(s,index,i);
- helper(res,index+1,s);
- swap(s,index,i);
- }
- }
- }
- public void swap(char[]t,int i,int j)
- {
- char c=t[i];
- t[i]=t[j];
- t[j]=c;
- }
- }
28.数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
- import java.util.HashMap;
- import java.util.Map;
- public class Solution {
- public int MoreThanHalfNum_Solution(int [] array) {
- int len = array.length;
- if(len == 0)
- return 0;
- if(len == 1)
- return array[0];
- Map<Integer,Integer> map = new HashMap<Integer, Integer>();
- int key;
- int value = 1;
- for(int i = 0; i < len; i++){
- key = array[i];
- if(map.containsKey(key)){
- value = map.get(key)+1;
- if(value > len/2)
- return key;
- map.put(key,value);
- }else{
- map.put(key,value);
- }
- }
- return 0;
- }
- }
29.输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
- import java.util.ArrayList;
- public class Solution {
- public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k){
- ArrayList<Integer> list = new ArrayList<Integer>();
- int len = input.length;
- if(k > len)
- return list;
- //使用的是冒泡排序,但是没有全排序,以为题目要求是最小的k个数,所以最外层循环只有k次
- for(int i = 0; i < k; i++){
- for(int j = 0; j < len-1-i; j++){
- if(input[j] < input[j+1]){
- int temp = input[j];
- input[j] = input[j+1];
- input[j+1] = temp;
- }
- }
- list.add(input[len-i-1]);
- }
- return list;
- }
- }
30.HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?
- public class Solution {
- public int FindGreatestSumOfSubArray(int[] array) {
- if(array.length == 0)
- return 0;
- int max = 0, sum = 0;
- for(int i = 0; i < array.length; i++){
- sum = sum + array[i];
- if(sum < array[i])//如果sum小于当前元素,这样就说明前面元素的和为负数,这样就从当前开始
- sum = array[i];
- if(i == 0){//这里是是为了解决数组开始的数都是负数的情况
- max = sum;
- }else if(sum > max){//这里用来比较max的sum的大小,要是sum大于max,就把sum的值赋值给max
- max = sum;
- }
- }
- return max;
- }
- }
Java--剑指offer(6)的更多相关文章
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...
- 剑指offer编程题Java实现——面试题5从头到尾打印链表
题目描述* 剑指offer面试题5:从尾到头打印链表 输入一个链表的头结点,从尾到头打印出每个结点的值 解决方案一:首先遍历链表的节点后打印,典型的"后进先出",可以使用栈来实现这 ...
- 剑指offer面试题-Java版-持续更新
最近在用Java刷剑指offer(第二版)的面试题.书中原题的代码采用C++编写,有些题的初衷是为了考察C++的指针.模板等特性,这些题使用Java编写有些不合适.但多数题还是考察通用的算法.数据结构 ...
- 《剑指offer》全部题目-含Java实现
1.二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. publi ...
- 剑指Offer——Java实现栈和队列的互模拟操作
剑指Offer--Java实现栈和队列的互模拟操作 栈模拟队列 题目:JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 思路:其实就是把队列正常入 ...
- 剑指Offer——知识点储备-故障检测、性能调优与Java类加载机制
剑指Offer--知识点储备-故障检测.性能调优与Java类加载机制 故障检测.性能调优 用什么工具可以查出内存泄露 (1)MerroyAnalyzer:一个功能丰富的java堆转储文件分析工具,可以 ...
- 剑指Offer——知识点储备-Java基础
剑指Offer--知识点储备-Java基础 网址来源: http://www.nowcoder.com/discuss/5949?type=0&order=0&pos=4&pa ...
- 剑指offer面试题5 从头到尾打印链表(java)
注:(1)这里体现了java数据结构与C语言的不同之处 (2)栈的操作直接利用stack进行 package com.xsf.SordForOffer; import java.util.Stack; ...
- 剑指offer面试题4 替换空格(java)
注:利用java中stringBuilder,append,length方法很方便的解决字符串问题 /* * 剑指offer 替换空格 * xsf * */ /*开始替换空格的函数,length为原数 ...
- 剑指offer面试题6 重建二叉树(java)
注:(1)java中树的构建 (2)构建子树时可以直接利用Arrays.copyOfRange(preorder, from, to),这个方法是左开右闭的 package com.xsf.SordF ...
随机推荐
- [转]KendoUI系列:Grid
本文转自:http://www.cnblogs.com/libingql/p/3774879.html 1.基本使用 <div id="grid"></div&g ...
- [转]阿里云配置mysql远程连接
默认是不能用客户端远程连接的,阿里云提供的help.docx里面做了设置说明,mysql密码默认存放在/alidata/account.log 首先登录: mysql -u root -h local ...
- Unity 5.3 安装完没有Android(安卓)或IOS Module(模块)?
Unity5.3 模块独立 Unity5.3把各个模块分开来了,主程序安装包更轻巧,在官网下载的话,能下载到 Unity安装程序,Unity编辑器等一些资源package,其它的模块可以通过Unity ...
- linux(TINY6410)下移植boa服务器
今天在tiny6410上移植了boa服务器,中间遇到了一些小问题.当时也及时解决了. 第一步:boa的编译 在www.boa.org下载Boa的压缩包 我这里用的是 boa-0.94.13.tar. ...
- uwsgi+flask环境中安装matplotlib
uwsgi+flask的python有自身的virtual environment,可以通过如下命令进入 . venv/bin/activate 虽然通过sudo apt-get install py ...
- Xcode 快捷键
1.commmand +shift +k ,隐藏模拟器键盘,用户可以在真实键盘输入到模拟屏幕上.
- SQLite 增、删、改、查
1.iOS中实现SQLite的增.删.改.查 http://www.jianshu.com/p/0b9b78e704a4. 2.用数据库实现收藏功能 http://www.jianshu.com/p ...
- MySQL Index详解
FROM:http://blog.csdn.net/tianmo2010/article/details/7930482 ①MySQL Index 一.SHOW INDEX会返回以下字段 1.Tabl ...
- 数据表格 - DataGrid - 列表显示
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding=& ...
- 用 C# 轻松读取、改变文件的创建、修改、访问时间
创建时间是文件存入到电脑中的时间,而修改时间则是改变起内容的最后时间 // 读取文件的创建.修改.访问时间FileInfo fi = new FileInfo("C://test.txt&q ...