java OJ常用代码笔记

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};

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值