算法学习之剑指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,原来在 ...
随机推荐
- springboot过滤器的实现
springboot过滤器的实现 如下所示: import javax.servlet.*; import javax.servlet.annotation.WebFilter;import java ...
- MySQL和mybatis查询相关
0.mybatis的xml文件头 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapp ...
- Mybatis系列(二)配置
Mybatis系列(二)配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configu ...
- .Net基础篇_学习笔记_第七天_三元数表达式(if-else的转换写法)
三元表达式语法: 表达式1?表达式2:表达式3; 表达式1一般为一个关系表达式.如果表达式1的值为true,那么表达式2的值就是整个三元表达式的值.如果表达式1的值为false,那么表达式3的值就是整 ...
- ACM团队周赛题解(1)
这次周赛题目拉了CF315和CF349两套题. 因为我代码模板较长,便只放出关键代码部分 #define ll long long #define MMT(s,a) memset(s, a, size ...
- QCustomplot使用分享(八) 绘制图表-加载cvs文件
目录 一.概述 二.效果图 三.源码讲解 1.源码结构 2.头文件 3.移动游标 4.设置坐标轴矩形个数 5.添加图表数据 6.设置折线图类型 6.其他函数 四.测试方式 1.测试工程 2.测试文件 ...
- maven的pom.xml详解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- [Leetcode][动态规划] 第931题 下降路径最小和
一.题目描述 给定一个方形整数数组 A,我们想要得到通过 A 的下降路径的最小和. 下降路径可以从第一行中的任何元素开始,并从每一行中选择一个元素.在下一行选择的元素和当前行所选元素最多相隔一列. 示 ...
- MySQL数据库忘记密码怎么办?
忘记MySQL数据库密码就进不去数据库,也就无法修改密码,解决方法如下: 1:打开cmd命令符,先关闭正在运行的数据库,输入如下命令: 2:打开mysql.exe和mysqld.exe所在的文件夹,复 ...
- Mycat 配置文件server.xml
server.xml 几乎保存了所有 mycat 需要的系统配置信息. 1.system 标签: 该标签内嵌套的所有 property 标签都与系统配置有关. charset 属性: 该属性用于字符集 ...