31.求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。

public class Solution {
public int NumberOf1Between1AndN_Solution(int n) {
int number = 0; for(int i = 1; i <= n; i++){
String str = String.valueOf(i);
char [] chars=str.toCharArray();
for(int j = 0; j < chars.length; j++){
if(chars[j] == '1')
number++;
}
}
return number;
}
}

32.输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

import java.util.ArrayList;

public class Solution {
public String PrintMinNumber(int [] numbers) {
int len = numbers.length;
String str; if(len == 0 || numbers == null)
return ""; //这里相当于是把数组按”大小“排序,只是这里的排序方式不是平时的排序
for(int i = 0; i < len; i++){
for(int j = i; j < len; j++){
String m = String.valueOf(numbers[i]);
String n = String.valueOf(numbers[j]); if(Integer.parseInt(m+n) >= Integer.parseInt(n+m)){
int temp = numbers[j];
numbers[j] = numbers[i];
numbers[i] = temp;
}
}
}
str = String.valueOf(numbers[0]);
for(int i = 1; i < len; i++){
str = str + String.valueOf(numbers[i]);
} return str;
}
}

33.把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

public class Solution {
public int GetUglyNumber_Solution(int index) {
if(index <=0 ) { return 0 ; } int[] uglyNumbers = new int[index] ;
uglyNumbers[0] = 1 ;
int nextUglyIndex = 1 ;
int p2 = 0 ;
int p3 = 0 ;
int p5 = 0 ;
while(nextUglyIndex <= index-1) {
uglyNumbers[nextUglyIndex] = min(uglyNumbers[p2]*2, uglyNumbers[p3]*3, uglyNumbers[p5]*5) ;
while(uglyNumbers[p2]*2 <= uglyNumbers[nextUglyIndex]) {
p2++ ;
}
while(uglyNumbers[p3]*3 <= uglyNumbers[nextUglyIndex]) {
p3++ ;
}
while(uglyNumbers[p5]*5 <= uglyNumbers[nextUglyIndex]) {
p5++ ;
}
nextUglyIndex++ ;
} return uglyNumbers[index-1] ;
} public int min(int a, int b, int c) {
int temp = (a < b) ? a : b ;
return temp < c ? temp : c ;
} }

34.找出字符串中第一个只出现一次字符的位置。

import java.util.HashMap;

public class Solution {
public int FirstNotRepeatingChar(String str)
{ HashMap<Character,Integer> map=new HashMap<Character,Integer>();
for(int i=0;i<str.length();i++)
{
char c=str.charAt(i);
if(map.containsKey(c))
{
int time=map.get(c);
time++;
map.put(c,time); }
else
{
map.put(c,1);
}
}
for(int i=0;i<str.length();i++)
{
char c=str.charAt(i);
if(map.get(c)==1)
return i;
}
return -1;
}
}

35.在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007。

  这一题使用的是归并排序。

public class Solution {
public int InversePairs(int [] array) {
if(array==null||array.length<=0){
return 0;
}
int[] copy = new int[array.length];
long count = recInversePairs(array,copy,0,array.length-1); int result = (int)(count%1000000007);
return result;
}
public long recInversePairs(int[] array,int[] copy,int start,int end){
if(start==end){
copy[start] = array[start];
return 0;
}
int mid = (start+end)/2;
long left = recInversePairs(array,copy,start,mid);
long right = recInversePairs(array,copy,mid+1,end);
long count = countInversePairs(array,copy,start,mid,end);
return count+left+right;
}
public long countInversePairs(int[] array,int[] copy,int start,int mid,int end){ int left = mid;
int right = end;
for(int i=start;i<=end;i++){
array[i] = copy[i];
}
int index = end;
long count = 0;
while(left>=start&&right>=mid+1){
if(array[left]>array[right]){
copy[index--] = array[left--];
count += right - mid;
}else{
copy[index--] = array[right--];
}
}
while(left>=start){
copy[index--] = array[left--];
}
while(right>=mid+1){
copy[index--] = array[right--];
}
return count;
}
}

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

  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. [转]Membership 到 .NET4.5 之 ASP.NET Identity

    本文转自:http://www.cnblogs.com/jesse2013/p/membership-part3.html 我们前面已经讨论过了如何在一个网站中集成最基本的Membership功能,然 ...

  2. ARM学习篇 SDRAM理解

    1.SDRAM单管存储单元 SDRAM单管电路图 C记忆单元 T控制门管 Z字线 W位线 注:图示为N沟道耗尽型MOS管 写入:Z加高电平,MOS导通,W状态决定了电容C的状态 读出:Z加高电平,MO ...

  3. Android可移动控件

    可移动控件: 效果图: 获取屏幕的宽高: DisplayMetrics dm = getResources().getDisplayMetrics(); screenWidth = dm.widthP ...

  4. leetcode-Count Primes 以及python的小特性

    题目大家都非常熟悉,求小于n的所有素数的个数. 自己写的python 代码老是通不过时间门槛,无奈去看了看大家写的code.下面是我看到的投票最高的code: class Solution: # @p ...

  5. Hash MD5 CRC 知识

    本文旨在科普安全相关的知识,并附一个C#实现的文件管理工具. Hash 安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的五种安全 ...

  6. TortoiseSVN status cache占用CPU高

    进程占用CPU高 每次从SVN上更新资源时,电脑都会卡死,直到资源更新完.当要Commit资源时,SVN也会卡死资源管理器,如下图所示: 解决占用CPU高的问题 1.禁用图标缓存 2.排除路径和包含路 ...

  7. IIS7.5中神秘的ApplicationPoolIdentity

    IIS7.5中(仅win7,win2008 SP2,win2008 R2支持),应用程序池的运行帐号,除了指定为LocalService,LocalSystem,NetWorkService这三种基本 ...

  8. 装完Centos7提示Initial setup of CentOS Linux 7 (core)(转载)

    http://www.th7.cn/system/lin/201603/156762.shtml

  9. nginx反向代理tomcat访问时浏览器加载失败,出现 ERR_CONTENT_LENGTH_MISMATCH 问题

    问题说明:测试机上部署了一套业务环境,nginx反向代理tomcat,在访问时长时间处于加载中,十分缓慢! 通过浏览器调试(F12键->Console),发现有错误ERR_CONTENT_LEN ...

  10. S2总结笔记

    第一章:深入.NET框架 1..NET FrameWork两大组件是什么? 解析:.NET 框架类库(FCL:FrameWork Class Library)和公共语言运行时(CLR:common l ...