算法学习之剑指offer(七)
题目1
题目描述
输入描述:
题目保证输入的数组中没有的相同的数字
数据范围:
对于%50的数据,size<=10^4
对于%75的数据,size<=10^5
对于%100的数据,size<=2*10^5
输入
1,2,3,4,5,6,7,0
输出
7
public class Solution {
int cnt=0;
public int InversePairs(int[] array) {
cnt = 0;
if (array != null)
mergeSortUp2Down(array, 0, array.length - 1);
return cnt;
}
public void mergeSortUp2Down(int[] array,int start,int end){
if(start>=end)
return;
int mid = (start+end)/2;
mergeSortUp2Down(array,start,mid);
mergeSortUp2Down(array,mid+1,end);
sort(array,start,mid,end);
}
public void sort(int[] array,int start,int mid,int end){
int p1=start,p2=mid+1,k=0;
int tmp[] = new int[end-start+1];
while(p1<=mid&&p2<=end){
if(array[p1]>array[p2]){
cnt+=mid-p1+1;
cnt%=1000000007;
tmp[k++]=array[p2++];
}else{
tmp[k++]=array[p1++];
}
}
while(p1<=mid)
tmp[k++]=array[p1++];
while(p2<=end)
tmp[k++]=array[p2++];
for(int i=0;i<tmp.length;i++)
array[start++]=tmp[i];
}
}
题目2
题目描述
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if(pHead1==null||pHead2==null)
return null;
int length1=0,length2=0;
ListNode node = pHead1;
while(node!=null){
length1++;
node=node.next;
}
node = pHead2;
while(node!=null){
length2++;
node=node.next;
}
ListNode firstGoNode;
int chaValue=length2-length1;
if(chaValue>0){
firstGoNode=pHead2;node=pHead1;
}else{
firstGoNode=pHead1;node=pHead2;
}
if(chaValue<0)///之前少了这个地方!!!因为可能是负数!
chaValue=-chaValue;
while(chaValue>0){
chaValue--;
firstGoNode=firstGoNode.next;
}
while(node!=null&&firstGoNode!=null){
if(node.val==firstGoNode.val)
return node;
firstGoNode=firstGoNode.next;
node=node.next;
}
return null;
}
}
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
ListNode p1 = pHead1;
ListNode p2 = pHead2;
while(p1!=p2){
p1 = (p1==null ? pHead2 : p1.next);
p2 = (p2==null ? pHead1 : p2.next);
}
return p1;
}
}
题目3
题目描述
public class Solution {
public int GetNumberOfK(int [] array , int k) {
int minIndex = getMinIndex(array,k);
int maxIndex = getMaxIndex(array,k);
return maxIndex-minIndex+1;
}
public int getMinIndex(int [] array , int k) {
int start=0,end=array.length-1;
int mid=(start+end)/2;
while(start<=end){
if(array[mid]<k){
start=mid+1;
}else{
end=mid-1;
}
mid=(start+end)/2;
}
return start;
}
public int getMaxIndex(int [] array , int k) {
int start=0,end=array.length-1;
int mid=(start+end)/2;
while(start<=end){
if(array[mid]>k){
end=mid-1;
}else{
start=mid+1;
}
mid=(start+end)/2;
}
return end;
}
}
题目4
题目描述
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public int TreeDepth(TreeNode root) {
if(root==null)
return 0;
int left = TreeDepth(root.left);
int right = TreeDepth(root.right);
return left>right?left+1:right+1;
}
}
题目5
题目描述
public class Solution {
boolean isBalanced = true;
public boolean IsBalanced_Solution(TreeNode root) {
getDepth(root);
return isBalanced;
}
public int getDepth(TreeNode root) {
if(root==null)
return 0;
int left = getDepth(root.left);
int right = getDepth(root.right);
if(Math.abs(left-right)>1)
{
isBalanced = false;
return 0;//已经不是平衡二叉树没必要继续遍历了
}
return left>right?left+1:right+1;
}
}
题目6
题目描述
//num1,num2分别为长度为1的数组。传出参数
//将num1[0],num2[0]设置为返回结果
public class Solution {
public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
if(array==null ||array.length<2)
return ;
int temp = 0;
for(int i=0;i<array.length;i++)
temp ^= array[i];
int indexOf1 = findFirstBitIs(temp);
for(int i=0;i<array.length;i++){
if(isBit(array[i], indexOf1))
num1[0]^=array[i];
else
num2[0]^=array[i];
}
}
public int findFirstBitIs(int num){
int indexBit = 0;
while(((num & 1)==0) && (indexBit)<8*4){
num = num >> 1;
++indexBit;
}
return indexBit;
}
public boolean isBit(int num,int indexBit){
num = num >> indexBit;
return (num & 1) == 1;
}
}
算法学习之剑指offer(七)的更多相关文章
- 算法学习之剑指offer(十一)
一 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. import java.util.*; ...
- 算法学习之剑指offer(九)
一 题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). public class Solution ...
- 算法学习之剑指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 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. public class Solution ...
- 算法学习之剑指offer(四)
题目1 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) /** public class TreeNode { int val = 0; Tree ...
- 算法学习之剑指offer(十二)
一 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩 ...
- 算法学习之剑指offer(十)
一 题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2","-123","3 ...
- 算法学习之剑指offer(八)
题目一 题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没 ...
- 算法学习之剑指offer(三)
题目1 题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 如果一个整数不为0,那么这个整数至少有一位是1.如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在 ...
随机推荐
- 创建多线程之threading.Thread的使用
1.threading模块 threading模块是众多多线程管理模块的其一,它能确保重要的子线程退出后进程才退出. multiprocess模块的完全模仿了threading模块的接口,二者在使用层 ...
- 学习笔记_第十天_方法_方法的综合练习---ref练习
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- js 正则表达式:价格的校验
/*验证单价:包括两位小数*/var priceReg = /(^[1-9]\d*(\.\d{1,2})?$)|(^0(\.\d{1,2})?$)/;var price=$("#price& ...
- 为什么Kubernetes使用Pod作为最小调度单元
一.Pod说明 Pod只是一个逻辑概念,一个原子调度单位,其优势在于 可以统一调度一组容器到指定的node上 共享资源,Pod的容器可以使用localhost进行通信,使用volume进行文件共享.使 ...
- [VB.NET Tips]再谈字符串连接之内置池
CLR自动维护一个称为"内置池"(暂存池)(intern pool)的表,在编译时此表包含程序中声明的每个唯一的字符串常量的单个实例,以及以编程方式创建的String类的任何唯一实 ...
- Docker学习之docker-compose
docker-compose 安装 1.Mac/Windows: 安装docker的时候附带安装了. 2.Linux: curl https://github.com/docker/compose L ...
- Widget 中的 State 解析
StatefulWidget 应对有交互.需要动态变化视觉效果的场景 StatelessWidget 则用于处理静态的.无状态的视图展示 那么,StatelessWidget 是否有存在的必要?Sta ...
- OpenGL在ubuntu下的成功配置
sudo apt-get update sudo apt-get install build-essential sudo apt-get install libgl1-mesa-dev sudo a ...
- 利用Code::Blocks搭建64位C++开发平台
0.前言 随着64位计算机的普及,编写64位程序成为程序员基本的要求.我在<体验Code::Blocks下的C++编程>中描述了利用Code::Blocks官方提供的封装了编译器的安装包( ...
- Java 网络爬虫,就是这么的简单
这是 Java 网络爬虫系列文章的第一篇,如果你还不知道 Java 网络爬虫系列文章,请参看 学 Java 网络爬虫,需要哪些基础知识.第一篇是关于 Java 网络爬虫入门内容,在该篇中我们以采集虎扑 ...