26.输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

  1. /**
  2. public class TreeNode {
  3. int val = 0;
  4. TreeNode left = null;
  5. TreeNode right = null;
  6.  
  7. public TreeNode(int val) {
  8. this.val = val;
  9.  
  10. }
  11.  
  12. }
  13. */
  14. public class Solution {
  15. public TreeNode Convert(TreeNode pRootOfTree) {
  16. if(pRootOfTree == null)
  17. return null;
  18. if(pRootOfTree.left == null && pRootOfTree.right == null)
  19. return pRootOfTree;
  20.  
  21. //使用递归求出根节点的前一个节点
  22. TreeNode pre = Convert(pRootOfTree.left);
  23. TreeNode temp = pre;
  24.  
  25. //循环求出左子树最右边的节点
  26. while(temp != null && temp.right != null){
  27. temp = temp.right;
  28. }
  29.  
  30. if(pre != null){
  31. temp.right = pRootOfTree;
  32. pRootOfTree.left = temp;
  33. }
  34.  
  35. TreeNode last = Convert(pRootOfTree.right);
  36.  
  37. if(last != null){
  38. pRootOfTree.right = last;
  39. last.left = pRootOfTree;
  40. }
  41.  
  42. return pre != null ? pre : pRootOfTree;
  43. }
  44. }

27.输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 

  输入描述:
  1.   输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. public class Solution {
  4. public ArrayList<String> Permutation(String str)
  5. {
  6. ArrayList<String> res=new ArrayList<String>();
  7. if(str.length()==0||str==null)
  8. return res;
  9. int n= str.length();
  10. helper(res,0,str.toCharArray());
  11. Collections.sort(res);
  12. return res;
  13.  
  14. }
  15. public void helper( ArrayList<String> res,int index,char []s)
  16. {
  17. if(index==s.length-1)
  18. res.add(new String(s));
  19. for(int i=index;i<s.length;i++)
  20. {
  21. if(i==index||s[index]!=s[i])
  22. {
  23. swap(s,index,i);
  24. helper(res,index+1,s);
  25. swap(s,index,i);
  26. }
  27. }
  28.  
  29. }
  30.  
  31. public void swap(char[]t,int i,int j)
  32. {
  33. char c=t[i];
  34. t[i]=t[j];
  35. t[j]=c;
  36. }
  37. }

28.数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

  1. import java.util.HashMap;
  2. import java.util.Map;
  3.  
  4. public class Solution {
  5. public int MoreThanHalfNum_Solution(int [] array) {
  6. int len = array.length;
  7.  
  8. if(len == 0)
  9. return 0;
  10. if(len == 1)
  11. return array[0];
  12.  
  13. Map<Integer,Integer> map = new HashMap<Integer, Integer>();
  14.  
  15. int key;
  16. int value = 1;
  17.  
  18. for(int i = 0; i < len; i++){
  19. key = array[i];
  20. if(map.containsKey(key)){
  21. value = map.get(key)+1;
  22. if(value > len/2)
  23. return key;
  24. map.put(key,value);
  25. }else{
  26. map.put(key,value);
  27. }
  28. }
  29.  
  30. return 0;
  31. }
  32. }

29.输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

  1. import java.util.ArrayList;
  2.  
  3. public class Solution {
  4. public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k){
  5. ArrayList<Integer> list = new ArrayList<Integer>();
  6. int len = input.length;
  7.  
  8. if(k > len)
  9. return list;
  10.  
  11. //使用的是冒泡排序,但是没有全排序,以为题目要求是最小的k个数,所以最外层循环只有k次
  12. for(int i = 0; i < k; i++){
  13. for(int j = 0; j < len-1-i; j++){
  14. if(input[j] < input[j+1]){
  15. int temp = input[j];
  16. input[j] = input[j+1];
  17. input[j+1] = temp;
  18. }
  19. }
  20. list.add(input[len-i-1]);
  21. }
  22.  
  23. return list;
  24. }
  25. }

30.HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?

  1. public class Solution {
  2. public int FindGreatestSumOfSubArray(int[] array) {
  3. if(array.length == 0)
  4. return 0;
  5. int max = 0, sum = 0;
  6.  
  7. for(int i = 0; i < array.length; i++){
  8. sum = sum + array[i];
  9.  
  10. if(sum < array[i])//如果sum小于当前元素,这样就说明前面元素的和为负数,这样就从当前开始
  11. sum = array[i];
  12.  
  13. if(i == 0){//这里是是为了解决数组开始的数都是负数的情况
  14. max = sum;
  15. }else if(sum > max){//这里用来比较max的sum的大小,要是sum大于max,就把sum的值赋值给max
  16. max = sum;
  17. }
  18. }
  19.  
  20. return max;
  21. }
  22. }

Java--剑指offer(6)的更多相关文章

  1. 剑指Offer:面试题15——链表中倒数第k个结点(java实现)

    问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...

  2. 剑指offer编程题Java实现——面试题5从头到尾打印链表

    题目描述* 剑指offer面试题5:从尾到头打印链表 输入一个链表的头结点,从尾到头打印出每个结点的值 解决方案一:首先遍历链表的节点后打印,典型的"后进先出",可以使用栈来实现这 ...

  3. 剑指offer面试题-Java版-持续更新

    最近在用Java刷剑指offer(第二版)的面试题.书中原题的代码采用C++编写,有些题的初衷是为了考察C++的指针.模板等特性,这些题使用Java编写有些不合适.但多数题还是考察通用的算法.数据结构 ...

  4. 《剑指offer》全部题目-含Java实现

    1.二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. publi ...

  5. 剑指Offer——Java实现栈和队列的互模拟操作

    剑指Offer--Java实现栈和队列的互模拟操作 栈模拟队列   题目:JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型.   思路:其实就是把队列正常入 ...

  6. 剑指Offer——知识点储备-故障检测、性能调优与Java类加载机制

    剑指Offer--知识点储备-故障检测.性能调优与Java类加载机制 故障检测.性能调优 用什么工具可以查出内存泄露 (1)MerroyAnalyzer:一个功能丰富的java堆转储文件分析工具,可以 ...

  7. 剑指Offer——知识点储备-Java基础

    剑指Offer--知识点储备-Java基础 网址来源: http://www.nowcoder.com/discuss/5949?type=0&order=0&pos=4&pa ...

  8. 剑指offer面试题5 从头到尾打印链表(java)

    注:(1)这里体现了java数据结构与C语言的不同之处 (2)栈的操作直接利用stack进行 package com.xsf.SordForOffer; import java.util.Stack; ...

  9. 剑指offer面试题4 替换空格(java)

    注:利用java中stringBuilder,append,length方法很方便的解决字符串问题 /* * 剑指offer 替换空格 * xsf * */ /*开始替换空格的函数,length为原数 ...

  10. 剑指offer面试题6 重建二叉树(java)

    注:(1)java中树的构建 (2)构建子树时可以直接利用Arrays.copyOfRange(preorder, from, to),这个方法是左开右闭的 package com.xsf.SordF ...

随机推荐

  1. [转]KendoUI系列:Grid

    本文转自:http://www.cnblogs.com/libingql/p/3774879.html 1.基本使用 <div id="grid"></div&g ...

  2. [转]阿里云配置mysql远程连接

    默认是不能用客户端远程连接的,阿里云提供的help.docx里面做了设置说明,mysql密码默认存放在/alidata/account.log 首先登录: mysql -u root -h local ...

  3. Unity 5.3 安装完没有Android(安卓)或IOS Module(模块)?

    Unity5.3 模块独立 Unity5.3把各个模块分开来了,主程序安装包更轻巧,在官网下载的话,能下载到 Unity安装程序,Unity编辑器等一些资源package,其它的模块可以通过Unity ...

  4. linux(TINY6410)下移植boa服务器

    今天在tiny6410上移植了boa服务器,中间遇到了一些小问题.当时也及时解决了. 第一步:boa的编译 在www.boa.org下载Boa的压缩包  我这里用的是 boa-0.94.13.tar. ...

  5. uwsgi+flask环境中安装matplotlib

    uwsgi+flask的python有自身的virtual environment,可以通过如下命令进入 . venv/bin/activate 虽然通过sudo apt-get install py ...

  6. Xcode 快捷键

    1.commmand +shift +k ,隐藏模拟器键盘,用户可以在真实键盘输入到模拟屏幕上.

  7. SQLite 增、删、改、查

    1.iOS中实现SQLite的增.删.改.查  http://www.jianshu.com/p/0b9b78e704a4. 2.用数据库实现收藏功能 http://www.jianshu.com/p ...

  8. MySQL Index详解

    FROM:http://blog.csdn.net/tianmo2010/article/details/7930482 ①MySQL Index 一.SHOW INDEX会返回以下字段 1.Tabl ...

  9. 数据表格 - DataGrid - 列表显示

    <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding=& ...

  10. 用 C# 轻松读取、改变文件的创建、修改、访问时间

    创建时间是文件存入到电脑中的时间,而修改时间则是改变起内容的最后时间 // 读取文件的创建.修改.访问时间FileInfo fi = new FileInfo("C://test.txt&q ...