1.二分法
//找最大值
int left=0,right=n;
while(left<right)
{
int mid=(left+right)/2;
if(nums[0]<=nums[mid])//那么说明0-mid这段区间是递增的,最小数据应该在mid+1和right之间
left=mid+1;
else//否则,最小数据应该在0-mid之间
right=mid;
}
return nums[left];
2.输入方式:
1)Scanner的方法输入单个数值,并且规定,输入0,退出
//1.输入数字
Scanner sc=new Scanner(System.in);
while(sc.hasNext())
{
int num=sc.nextInt();
if(num==0)
break;
}
//2.输入字符串
Scanner sc=new Scanner(System.in);
while(sc.hasNext())
{
String str=sc.nextLine();
}
2)Scanner方式输入一整行字符串
//读取一整行数据
String str=new Scanner(System.in).nextLine();
//进行字符串拆分
String[] nums=str.split(" ");
for(String str_num:nums)
{
// string转int类型
int num=Integer.valueOf(str_num);
3) Scanner方式,先输入n,再输入n行数据
import java.util.*;
public class Main{
public static void main(String [] args)
{
Scanner sc=new Scanner(System.in);
while(sc.hasNext())
{
int n=sc.nextInt();
for(int i =0;i<n;i++)
{
}
}
}
}
3.String和StringBuffer的使用
可以参考《剑指offer》 替换空格
class Solution {
public String replaceSpaces(StringBuffer str) {
// 方法1:
// 主要运用StringBuffer的charAt函数以及replace函数:
// 查找字符串中包含某个字符,输入是index,返回字符
// replace用来替换字符
// 还可以用indexOf函数查找相关的元素位置
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ') {
str.replace(i, i + 1, "%20");
}
}
return str.toString();
//方法2:
// int s = 0;
// 查找字符串中是否有“ ”
// while((s = str.indexOf(" ")) != -1) {
// str.replace(s, s + 1, "%20");
// }
// return str.toString();
}
}
4.素数判断
public class PrimeNum {
public static void main(String[] args) {
int count = 0;
for(int i = 2 ; i <= 100;i++) {
boolean flag = true; //1、假设是质数
for(int j = 2; j <= (int)Math.sqrt(i); j++) { //Math.squart()取平方根
if(i % j == 0) {
flag = false; //2、改为不是质数
break;
}
}
if(flag) { //3、得结论
count++;
System.out.print(i + ",");
}
}
}
}
5.获取数字的每个位数加和
int sum=0;
int weishu=0;
for(int j=number;j!=0;j/=10)
{
weishu++;
sum+=j%10;
}
6.各种排序
1)冒泡排序
//装载临时变量
int temp;
//记录是否发生了置换, 0 表示没有发生置换、 1 表示发生了置换
int isChange;
//外层循环是排序的趟数
for (int i = 0; i < arrays.length - 1; i++) {
//每比较一趟就重新初始化为0
isChange = 0;
//内层循环是当前趟数需要比较的次数
for (int j = 0; j < arrays.length - i - 1; j++) {
//前一位与后一位与前一位比较,如果前一位比后一位要大,那么交换
if (arrays[j] > arrays[j + 1]) {
temp = arrays[j];
arrays[j] = arrays[j + 1];
arrays[j + 1] = temp;
//如果进到这里面了,说明发生置换了
isChange = 1;
}
}
//如果比较完一趟没有发生置换,那么说明已经排好序了,不需要再执行下去了
if (isChange == 0) {
break;
}
}
7.对于输出格式
一般来说,每行后面的输出,可以有空格,不会报格式错误
8.如果对于数组进行排序,那么可以用Arrays.sort(数组变量名),来实现
9.需要注意的点:
1)在java中进行字符比较的时候,不能用“==”,而是应该用str.equals
2)java的数组初始化
java数组的动态初始化
int [] arr=new int[数组长度]; //默认值为全部为0
静态初始化
int [] arr={1,2,3,4,5};