統計迴文、尋找第K大

1.執行如下程序,輸出結果是()

class Test
{
    private int data;
    int result = 0;
    public void m()
    {
        result += 2;
        data += 2;
        System.out.print(result + " " + data);
    }
}
class ThreadExample extends Thread
{
    private Test mv;
    public ThreadExample(Test mv)
    {
        this.mv = mv;
    }
    public void run()
    {
        synchronized(mv)
        {
            mv.m();
        }
    }
}
class ThreadTest
{
    public static void main(String args[])
    {
        Test mv = new Test();
        Thread t1 = new ThreadExample(mv);
        Thread t2 = new ThreadExample(mv);
        Thread t3 = new ThreadExample(mv);
        t1.start();
        t2.start();
        t3.start();
    }
}
//2 24 46 6

2.統計迴文
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
public class Test3 {
    public static boolean huiWen(String s1) {
        int i = 0;
        int j = s1.length() - 1;
        int len = s1.length() / 2;
        while (i < len && j >= len) {
            if (s1.charAt(i) == s1.charAt(j)) {
                i++;
                j--;
            } else {
                return false;
            }
        }
        return true;
    }
    public static int Solution(String s1,String s2) {
        int len = s1.length();
        int i = 0;
        int count = 0;
        if (huiWen(s2.concat(s1))) {
            count++;
        }
        while (i < len) {
            String ms1 = s1.substring(0, i + 1);
            String ms2 = s1.substring(i + 1);
            String result = ms1.concat(s2).concat(ms2);
            if (huiWen(result)) {
                count++;
            }
            i++;
        }
        return count;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String message1 = sc.nextLine();
        String message2 = sc.nextLine();
        int result = Solution(message1,message2);
        System.out.println(result);
    }
}

3.尋找第K大
https://www.nowcoder.com/questionTerminal/e016ad9b7f0b45048c58a9f27ba618bf
有一個整數數組,請你根據快速排序的思路,找出數組中第K大的數。
給定一個整數數組a,同時給定它的大小n和要找的K(K在1到n之間),請返回第K大的數,保證答案存在。
測試樣例:
[1,3,5,2,2],5,3
返回:2

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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章