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