算法学习之剑指offer(五)
题目1
题目描述
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence==null||sequence.length==0)
return false;
return check(sequence,0,sequence.length-1);
}
public boolean check(int [] sequence,int start,int end) {
//单个节点的情况
if((end-start)==0)
return true;
int i=end;
//找到左右子树分界点
for(;i>=start;i--)
if(sequence[i]<sequence[end])
break;
if(start>i)//说明全是右子树
return true;
//检查左子树里是不是有不符合的
for(int j=start;j<=i;j++)
if(sequence[j]>=sequence[end])
return false;
//不断对左右子树递归检查
return check(sequence,start,i)&&check(sequence,i+1,end-1);
}
}
题目2
题目描述
第一遍结果:
import java.util.ArrayList;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
private ArrayList<ArrayList<Integer>> listAll = new ArrayList<ArrayList<Integer>>();
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
if(root==null)
return listAll;
ArrayList<Integer> list = new ArrayList<Integer>();
doFindPath(root,list,target);
return listAll;
}
public void doFindPath(TreeNode root,ArrayList<Integer> list,int target) {
if(root==null)
return;
target -= root.val;
list.add(root.val);
if(root.left==null&&root.right==null&&target==0)
listAll.add(list);
doFindPath(root.left,new ArrayList<Integer>(list),target);
doFindPath(root.right,new ArrayList<Integer>(list),target);
}
}
第二次参考他人的代码为:
import java.util.ArrayList;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
private ArrayList<ArrayList<Integer>> listAll = new ArrayList<ArrayList<Integer>>();
private ArrayList<Integer> list = new ArrayList<Integer>();
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
if(root==null)
return listAll;
target -= root.val;
list.add(root.val);
if(root.left==null&&root.right==null&&target==0)
listAll.add(new ArrayList<Integer>(list));
FindPath(root.left,target);
FindPath(root.right,target);
list.remove(list.size()-1);
return listAll;
}
}
题目3
题目描述
/*
public class RandomListNode {
int label;
RandomListNode next = null;
RandomListNode random = null;
RandomListNode(int label) {
this.label = label;
}
}
*/
public class Solution {
public RandomListNode Clone(RandomListNode pHead)
{
if(pHead==null)
return null;
RandomListNode node = pHead;
while(node!=null){
RandomListNode new_node = new RandomListNode(node.label);
new_node.next = node.next;
node.next = new_node;
node = new_node.next;
}
node = pHead;
while(node!=null){
if(node.random!=null)
node.next.random = node.random.next;
node = node.next.next;
}
RandomListNode head = pHead.next;
RandomListNode cirNode = pHead.next;
node = pHead;
while(node!=null){
node.next = node.next.next;
if(cirNode.next!=null)
cirNode.next = cirNode.next.next;
node = node.next;
cirNode = cirNode.next;
}
return head;
}
}
题目4
题目描述
/**
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 left = Convert(pRootOfTree.left);
TreeNode p = left;
while(p!=null&&p.right!=null)
p=p.right;
if(left!=null){
p.right=pRootOfTree;
pRootOfTree.left=p;
}
TreeNode right = Convert(pRootOfTree.right);
if(right!=null){
pRootOfTree.right=right;
right.left = pRootOfTree;
}
if(left!=null)
return left;
else
return pRootOfTree;
}
}
题目5
题目描述
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
import java.util.ArrayList;
import java.util.*;
public class Solution {
ArrayList<String> list = new ArrayList<String>();
HashSet<String> hs = new HashSet<String>();
public ArrayList<String> Permutation(String str) {
if(str==null||str.length()==0)
return list;
char[] chars = str.toCharArray();
doPermutation(chars,0,str.length()-1);
list.addAll(hs);
Collections.sort(list);
return list;
}
public void doPermutation(char[] chars,int start,int end) {
if(start==end){
StringBuilder sb = new StringBuilder();
for(char c:chars){
sb.append(c);
}
hs.add(sb.toString());
}else{
for(int i=start;i<=end;i++){
swap(chars,start,i);
doPermutation(chars,start+1,end);
swap(chars,start,i);
}
}
}
public void swap(char[] chars,int a,int b){
char tmp = chars[a];
chars[a] = chars[b];
chars[b] = tmp;
}
}
题目6
题目描述
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
if(array==null)
return 0;
sort(array,0,array.length-1);
int index = (array.length)/2;
int times=0;
for(int i=0;i<array.length;i++)
if(array[i]==array[index])
times++;
if(times>index)
return array[index];
else
return 0;
}
public void sort(int [] array,int start,int end) {
if(start>=end)
return ;
int p = partition(array,start,end);
sort(array,start,p-1);
sort(array,p+1,end);
}
public int partition(int [] array,int start,int end) {
int p = start;
for(int i=start+1;i<=end;i++){
if(array[start]>array[i]){
swap(array,++p,i);
}
}
swap(array,p,start);
return p;
}
public void swap(int[] data, int a, int b) {
int tmp = data[a];
data[a] = data[b];
data[b] = tmp;
}
}
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
int n = array.length;
if (n == 0) return 0;
int num = array[0], count = 1;
for (int i = 1; i < n; i++) {
if (array[i] == num) count++;
else count--;
if (count == 0) {
num = array[i];
count = 1;
}
}
// Verifying
count = 0;
for (int i = 0; i < n; i++) {
if (array[i] == num) count++;
}
if (count * 2 > n) return num;
return 0;
}
}
算法学习之剑指offer(五)的更多相关文章
- 算法学习之剑指offer(十一)
一 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. import java.util.*; ...
- 算法学习之剑指offer(九)
一 题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). public class Solution ...
- 算法学习之剑指offer(十)
一 题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2","-123","3 ...
- 算法学习之剑指offer(八)
题目一 题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没 ...
- 算法学习之剑指offer(六)
题目1 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. import java.util.*; public cl ...
- 算法学习之剑指offer(四)
题目1 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) /** public class TreeNode { int val = 0; Tree ...
- 算法学习之剑指offer(十二)
一 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩 ...
- 算法学习之剑指offer(七)
题目1 题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P% ...
- 算法学习之剑指offer(三)
题目1 题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 如果一个整数不为0,那么这个整数至少有一位是1.如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在 ...
随机推荐
- Mysql的两种存储引擎以及区别
一.Mysql的两种存储引擎 1.MyISAM: ①不支持事务,但是整个操作是原子性的(事务具备四种特性:原子性.一致性.隔离性.持久性) ②不支持外键,支持表锁,每次所住的是整张表 MyIS ...
- Linux中新建用户用不了sudo命令问题:rootr is not in the sudoers file.This incident will be reported解决
参考:https://blog.csdn.net/lichangzai/article/details/39501025 如果执行sudo命令的用户没有执行sudo的权限,执行sudo命令时会报下面的 ...
- FreeSql (十六)分页查询
IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.MySql, "Data ...
- fireFox模拟 post请求、上传插件,火狐浏览器中文postman插件
ApiPost是一个支持团队协作,支持模拟POST.GET.PUT等常见请求,并可直接生成文档的API调试.管理工具. 它拥有以下功能特性: 1.文档管理ApiPost不仅可以快速生成接口文档,还支持 ...
- 阿里云 centos7 64位搭建JAVA环境-----安装JDK(2)
mysql安装好以后,把jdk环境配置一下. 首先下载jdk 8,在官网下载. 找到链接 http://download.oracle.com/otn-pub/java/jdk/8u171-b11/5 ...
- Winforn中导入Excel并显示然后获取多选框选中的内容
场景 使用NPOI导入Excel并赋值给DataTable,然后显示在DataGrdView上,并且添加多选框,然后获取选中行的内容. Winform中使用NPOI实现Excel导入并赋值给DataT ...
- Windows7关闭默认共享
注意:禁用默认共享会导致安装ORACLE时执行先决条件检测不通过,要想安装ORACLE得先打开共享. 1.win+r 运行里输入compmgmt.msc进入计算机管理,在共享文件夹里,去掉所有的盘共享 ...
- 【学习笔记】第二章 python安全编程基础---python爬虫基础(urllib)
一.爬虫基础 1.爬虫概念 网络爬虫(又称为网页蜘蛛),是一种按照一定的规则,自动地抓取万维网信息的程序或脚本.用爬虫最大的好出是批量且自动化得获取和处理信息.对于宏观或微观的情况都可以多一个侧面去了 ...
- Https与Http的区别以及Https的解说
http:信息不加密,具有信息被盗的危险 https:信息加密,第三获取原信息 1:https多了一层SSL,而这一层的设计是为了达到如下的 (1) 所有信息都是加密传播,第三方无法窃听. (2) 具 ...
- 编写自动匹配的下拉框(已解决IE8兼容)
如何制作一个带匹配功能的下拉框? 之前看见layui有相关组件,但是发现,如果输入的内容在下拉框中没有相应的匹配,就会清空当前值,搞得我很不满意.有些代码是从网上扒下来的,但是找不到原地址了,凑合看吧 ...