算法学习之剑指offer(八)
题目一
题目描述
输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列
import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer> > resultList = new ArrayList<ArrayList<Integer> >();
if(sum<=2)
return resultList;
for(int n=sum-1;n>=1;n--)
{
ArrayList<Integer> list = new ArrayList<Integer>();
int on=2*sum-n*(n+1);
int lower = 2*(n+1);
int startNum=on/lower;
if(startNum>0&&(startNum*(n+1)+n*(n+1)/2)==sum)
{
for(int j=0;j<=n;j++)
list.add(startNum+j);
resultList.add(list);
}
}
return resultList;
}
}
题目二
题目描述
输出描述:
对应每个测试案例,输出两个数,小的先输出。
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> list = new ArrayList<Integer>();
if(array==null||array.length<2)
return list;
int minIndex =0,maxIndex=array.length-1;
while(minIndex<maxIndex){
if(array[minIndex]+array[maxIndex]==sum)
{
list.clear();
list.add(array[minIndex]);
list.add(array[maxIndex]);
break;
}else if(array[minIndex]+array[maxIndex]>sum){
maxIndex--;
}else {
minIndex++;
}
}
return list;
}
}
题目三
题目描述
public class Solution {
public String LeftRotateString(String str,int n) {
if(str.length()==0)
return str;
StringBuffer str1 = new StringBuffer(str.substring(0,n));
StringBuffer str2 = new StringBuffer(str.substring(n,str.length()));
str2.append(str1);
return str2.toString();
}
}
题目四
题目描述
public class Solution {
public String ReverseSentence(String str) {
if(str==null||str.trim().length()<=1)
return str;
String[] strs = str.split(" ");
StringBuffer sb = new StringBuffer();
for(int i=strs.length-1;i>=0;i--)
{
sb.append(strs[i]);
if(i>=1)
sb.append(" ");
}
return sb.toString();
}
}
题目五
import java.util.Arrays;
public class Solution {
public boolean isContinuous(int [] numbers) {
int length = numbers.length;
if(length==0)
return false;
int zeroNum=0;
int intervalNum=0;
Arrays.sort(numbers);
for(int i=0;i<length-1;i++){
if(numbers[i]==0){
zeroNum++;
continue;
}
if(numbers[i]==numbers[i+1])
return false;
intervalNum+=numbers[i+1]-numbers[i]-1;
}
if(zeroNum>=intervalNum)
return true;
return false;
}
}
题目六
题目描述
两种解法(本质一样!)第二种更好懂点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import java.util.*; public class Solution { public int LastRemaining_Solution( int n, int m) { if (m == 0 || n == 0 ) return - 1 ; ArrayList<Integer> data = new ArrayList<Integer>(); for ( int i = 0 ; i < n; i++) { data.add(i); } int index = 0 ; while (data.size() > 1 ) { index = (index + m- 1 ) % data.size(); data.remove(index); } return data.get( 0 ); } } |
第二种更易懂
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
import java.util.*; public class Solution { public int LastRemaining_Solution( int n, int m) { if (m == 0 || n == 0 ) { return - 1 ; } ArrayList<Integer> list = new ArrayList<Integer>(); for ( int i= 0 ;i<n;i++) list.add(i); int size = list.size(); //注意一个关键点:第一次删人和后来的删人不一样! //第一次出局时(不用考虑之前少了个人)。第一次直接拿着开始下标和第几个算就行了 int LoopStartIndex= 0 ; int RemoveIndex = (LoopStartIndex+(m- 1 ))%size; list.remove(RemoveIndex); size = list.size(); //第二次及之后出局(要考虑之前少了个人了,删除下标得-1),要考虑走了人,得-1了 while (size!= 1 ){ LoopStartIndex=(RemoveIndex+ 1 )%size; RemoveIndex = (LoopStartIndex+(m- 1 )- 1 )%size; list.remove(RemoveIndex); size = list.size(); } return list.get( 0 ); } } |
算法学习之剑指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(七)
题目1 题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P% ...
- 算法学习之剑指offer(三)
题目1 题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 如果一个整数不为0,那么这个整数至少有一位是1.如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在 ...
随机推荐
- SSM相关面试题(简答)
1.springmvc的执行 流程: 2.mybstis的执行流程: 3.ioc和DI的理解: 4.对aop的理解: 5.spring中常见的设计模式: 6.spring中声明式事务处理的配置: ...
- redis的几个知识点
Redis的全称是Remote Dictionary Server,即远程字典服务,通常用作服务器缓存服务. 这里通过Redis的几个知识点来了解Redis. Redis的通讯协议 Redis的通讯协 ...
- Oracle SQL调优之绑定变量用法简介
目录 一.SQL执行过程简介 二.绑定变量典型用法 2.1.在SQL中绑定变量 2.2.在PL/SQL中使用绑定变量 2.3.PL/SQL批量绑定变量 2.4.Java代码里使用绑定变量 最近在看&l ...
- 在Win10右键菜单添加校验文件Hash值命令
把以下代码保存为reg文件导入注册表即可. Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\文件哈希校验] " ...
- at org.apache.jsp.WEB_002dINF.pages.login_jsp._jspInit( login_jsp.java:22)
SEVERE: Servlet.service() for servlet jsp threw exception java.lang.NullPointerException at org.apac ...
- CentOS7下LVM的基本操作
CentOS7下LVM的基本操作-创建LVM 环境 物理主机:windows10 虚拟软件:VMWare14 虚拟机:CentOS Linux release 7.6.1810 (Core) 软件环境 ...
- APP自動化測試腳本2
package com.lemon.day01; import java.net.MalformedURLException; import java.net.URL; import java.uti ...
- Python学习-字符编码, 数据类型
本篇主要内容: 字符编码 Python中的数据类型有哪些 类型的一些常用操作及方法 一.字符编码 编码解释的大部分内容摘自廖雪峰老师教程中的讲解,点击跳转. 简单介绍: 我们知道计算机只能处理数字,如 ...
- npm install 时间很长解决方案
国外镜像站很慢,所以我们可以更换为国内的镜像站 首先可以get命令查看registry npm congfig get registry 如果你没有变更果regustry你的结果应该会是这样的 也就是 ...
- 在vscode中配置python环境
1.安装vscode和python3.7(安装路径在:E:\Python\Python37): 2.打开vscode,在左下角点击设置图标选择setting,搜索python path,在该路径下选择 ...