一、輸入乙個複雜鍊錶
(每個節點中有節點值,以及兩個指標,
乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點)
返回結果為複製後複雜鍊錶的head。
(注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)
class randomlistnode
}public
class
solution
randomlistnode p = new randomlistnode(phead.label);
//由於複製只需要複製鍊錶本身,隨機節點指標引用原來的即可
p.random = phead.random;
p.next = clone(phead.next);
return p;
}}
二、輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。
要求不能建立任何新的結點,只能調整樹中結點指標的指向。
class treenode
}public
class
solution
//遞迴的中序遍歷
convert(prootoftree.left);
if(head == null) else
convert(prootoftree.right);
return head;
}}
三、輸入乙個字串,按字典序列印出該字串中字元的所有排列。
例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。
輸入描述:
輸入乙個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。
public
class
solution
//因為可能有字元重複,所以需要set去重
setset = new treeset<>();//treeset保證結果集為字典序
recursion(chs, set, 0);
res.addall(set);
return res;
}public
void
recursion(char chs, setset, int pos)
//策略就是把某個位置可能出現的字元的所有情況列出,並遞迴搜尋下去
for(int i = pos; i < chs.length; i++)
}public
void
swap(char chs, int i, int j)
}
四、陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。
例如輸入乙個長度為9的陣列。
由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。
如果不存在則輸出0。
public
class
solution else
}for(int i : map.keyset())
}return
0; }
}
五、輸入n個整數,找出其中最小的k個數。
例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。
public
class
solution
for(int i = input.length / 2 - 1; i >= 0; i--)
for(int i = input.length - 1; i > input.length - 1 - k; i--)
return res;
}public
void
adjustheap(int input, int pos, int len)
if(input[child] < tmp) else
pos = child;
}input[pos] = tmp;
}}
劍指offer程式設計
二維陣列中的查詢 題目描述 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,...
劍指程式設計(11)
一 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。public class solution bucket num...
劍指程式設計(13)
一 給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3 那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 public class solution pos用於存放最大值的位置 int max 0,pos 0 for int ...