每日肥學
- 導讀
- 📛演算法題
- 一點點思路
- 原始碼和決議
- 📛面試題
- 特別介紹
導讀
小伙伴們新的學期又要開始了,您是否已經做好了沖刺的準備了呢?如果您想在這個學期識訓的比別人更多我建議給肥肥點個關注,我們一起來增長知識,無論你是考研還是找作業或者是要加薪,這里都是一個不錯的選擇,讓我們紅塵作伴,一起肥學!!!

📛演算法題
實作獲取 下一個排列 的函式,演算法需要將給定數字序列重新排列成字典序中下一個更大的排列(即,組合出下一個更大的整數),
如果不存在下一個更大的排列,則將數字重新排列成最小的排列(即升序排列),
必須 原地 修改,只允許使用額外常數空間,
示例 1:
輸入:nums = [1,2,3]
輸出:[1,3,2]
示例 2:
輸入:nums = [3,2,1]
輸出:[1,2,3]
示例 3:
輸入:nums = [1,1,5]
輸出:[1,5,1]
示例 4:
輸入:nums = [1]
輸出:[1]
提示:
1 <= nums.length <= 100
0 <= nums[i] <= 100
一點點思路
我覺得這種題肯定是要用到遍歷的,關于遍歷的題我們也做過好幾道了有滑動視窗,中心擴散法,,,你會發現這些方法其實都會用到雙指標,所以我們得出結論這種題我們最最最普遍的方法就是構造雙指標,至于指標怎么移動就看你的解題技巧了,
原始碼和決議
class Solution {
public void nextPermutation(int[] nums) {
//倒著遍歷所以i是num的長度-2
int i = nums.length - 2;
//找到比前一個比后一個小的陣列下標比如陣列[2,3,9,7,6]這個回圈結束時i指向3
while (i >= 0 && nums[i] >= nums[i + 1]) {
i--;
}
if (i >= 0) {
int j = nums.length - 1;
//還是[2,3,9,7,6]這個例子i指向3以后找比三大的數這個時候就時6
while (j >= 0 && nums[i] >= nums[j]) {
j--;
}
//然后交換3和6的位置
swap(nums, i, j);
}
//這個函式的主要作用就是將6后面的數(當然這里沒有數我們假設有但是肯定時比6小的就假設為
//2,1兩個吧[2,3,9,7,6,2,1])2,1倒敘排列變成最小的1,2
reverse(nums, i + 1);
}
public void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
public void reverse(int[] nums, int start) {
int left = start, right = nums.length - 1;
while (left < right) {
swap(nums, left, right);
left++;
right--;
}
}
}
📛面試題
Java遍歷Map集合有哪幾種方式?各自效率怎么樣?
方式:
entrySet,key+value,key,value
效率:
1)map的key采用簡單形式和復雜形式時,查找的效率是不同的,簡單的key值效率更高
2)當資料量大的時候,采用entrySet遍歷key+value的效率要高于keySet
3)當我們只需要取得value值時,采用value來遍歷效率更高
特別介紹
📣小白練手專欄,適合剛入手的新人歡迎訂閱編程小白進階
📣python有趣練手專案里面包括了像《機器人尬聊》《惡搞程式》這樣的有趣文章,可以讓你快樂學python練手專案專欄
📣另外想學JavaWeb進廠的同學可以看看這個專欄:傳送們
📣這是個面試和考研的演算法練習我們一起加油上岸之路
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/297822.html
標籤:java
上一篇:JavaSE面試總結
下一篇:深度剖析—繼承和多型
