牛客杂记——6.1

梦想不抛弃苦心追求的人,只要不停止追求,你们会沐浴在梦想的光辉之中。再美好的梦想与目标,再完美的计划和方案,如果不能尽快在行动中落实,最终只能是纸上谈兵,空想一番。只要瞄准了大方向,坚持不懈地做下去,才能够扫除挡在梦想前面的障碍,实现美好的人生蓝图。牛客杂记——6.1,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

基础知识

1、在基本JAVA类型中,如果不明确指定,整数型默认为int类型,带小数的默认为是double类型
2、在不考虑反射的情况下,私有访问控制限制符private修饰成员变量只能被该类自身所访问和修改
3、Math.round(11.5)=12 Math.round(-11.5)=-11
Math.round()方法,括号里面的数+0.5后向下取值。例如Math.round(3.4)=3,3.4+0.5=3.9,但是没有到4所以向下取值为3
4、方法通常存储在进程中的方法区
5、要使对象具有序列化能力其类要实现java.io.Serializable接口

编程

统计回文

链接:https://www.nowcoder.com/questionTerminal/9d1559511b3849deaa71b576fa7009dc
来源:牛客网

“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。

例如:
A = “aba”,B = “b”。这里有4种把B插入A的办法:

  • 在A的第一个字母之前: “baba” 不是回文
  • 在第一个字母‘a’之后: “abba” 是回文
  • 在字母‘b’之后: “abba” 是回文
  • 在第二个字母’a’之后 “abab” 不是回文
    所以满足条件的答案为2
    在这里插入图片描述
    提供两种方法,第二种可能要麻烦些。
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String str1 = sc.nextLine();
            String str2 = sc.nextLine();
            int len = str1.length();
            int n = 0;
            for (int i = 0; i <= len; i++) {
                String str4 = str1.substring(0, i) + str2 + str1.substring(i);
                String str5 = new StringBuffer(str4).reverse().toString();
                if (str4.equals(str5)) {
                    n++;
                }
            }
            System.out.println(n);
        }
    }
}

import java.util.Scanner;
public class Main{
        public static void main (String[] args) {
        Scanner in = new Scanner(System. in) ;
        String A = in.nextLine ();
        Scanner in1 = new Scanner (System. in);
        String B = in.nextLine();
        int count = 0;
        if(A == null && B == null) {
            System.out.println(count);
            return;
        } else if (A != null && B != null) {
        count = add(A, B) ;
        }else if (A == null)  {
              A=B;
     StringBuffer C = new StringBuffer (A) ;
   int k = C.length();
   if (justHuiwen(C,k)) {
       count++;
   }
        }else if (B == null) {
     StringBuffer C = new StringBuffer (A) ;
        int k = C.length() ;
    if (justHuiwen(C,k)) {
        count++;

    }
        }
            System.out.println(count);
        }
   public static  int add(String A, String B) {

       int i = A.length() ;
        int count = 0;
        StringBuffer C = null;
        for(int j = 0;j< i+1;j++) {
            StringBuffer stringBuffer = new StringBuffer(A);
             C = stringBuffer.insert(j, B);
            int k = C.length();
            if (justHuiwen(C, k)) {
                count++;
            }
        }
            return count;
        }
        public static boolean justHuiwen (StringBuffer C, int length) {
        for (int i = 0; i < length/2 ; i++) {
        if (C.charAt(i)  != C.charAt (length -1-i)){
            return false;
        }
        }
            return true;
        }
}

第K大

有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。

给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。

测试样例:

在这里插入图片描述
两种方法,第一种分治,第二种直接排完

import java.util.*;

public class Finder {
    public int findKth(int[] a, int n, int K) {
        return findKth(a, 0, n-1, K);
    }
    public int findKth(int[] a, int low, int high, int k) {
        int part = partation(a, low, high);
        if(k == part - low + 1) return a[part];
        else if(k > part - low + 1) return findKth(a, part + 1, high, k - part + low -1);
        else return findKth(a, low, part -1, k);
    }
    public int partation(int[] a, int low, int high) {
        int key = a[low];
        while(low < high) {
            while(low < high && a[high] <= key) high--;
            a[low] = a[high];
            while(low < high && a[low] >= key) low++;
            a[high] = a[low];
        }
        a[low] = key;
        return low;
    }
    
}
import java.util.*;
public class Finder {
public int findKth(int[] a, int n, int K) {
// write code here
int i = 0;
i = n-K;
quickSort(a);
int b = 0;
b = a[i];
return b;
}
public void quickSort(int[] a){
quickHelper(a,0,a.length - 1);
}
public void quickHelper(int[] a, int left, int right) {
if(left >= right){
return;
}
int index = patition(a, left , right);
quickHelper(a, left , index - 1);
quickHelper(a, index + 1,right);
}
public int patition(int[] a, int left, int right){
int base = a[right];
int i = left;
int j = right;
while(i < j ){
while(i < j && a[i] <= base){
i++;
}
while (i < j && a[j] >= base){
j--;
}
if(i < j){
swap(a,i,j);
}
}
swap(a,i,right);
return i;
}
public void swap(int[] a, int i, int j){
int tmp = a[i];
    a[i] = a[j];
a[j] = tmp;
}
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/152981.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!