日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Leetcode-第 73 场双周赛

發布時間:2025/3/19 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode-第 73 场双周赛 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一題

題目描述

2190. 數組中緊跟 key 之后出現最頻繁的數字

解題思路

直接尋找就行了

解題代碼

class Solution {public int mostFrequent(int[] nums, int key) {int n = nums.length;int res = 0;int res_count=0;HashMap<Integer,Integer> map = new HashMap<>();for (int i = 0;i<= n-2;i++){if (nums[i]==key){int k = map.getOrDefault(nums[i+1],0)+1;map.put(nums[i+1],k);if (k>res_count){res_count = k;res = nums[i+1];}}}return res;} }

第二題

題目描述

2191. 將雜亂無章的數字排序

解題思路

要按照mapping的結果進行排序,因此,把原數字和目標數字封裝對象,根據目標數字編寫Comparator。

解題代碼

class Solution {public int[] sortJumbled(int[] mapping, int[] nums) {ArrayList<P> list = new ArrayList<>();for (int n : nums) {StringBuilder sb = new StringBuilder();for (char c : String.valueOf(n).toCharArray()) {sb.append(mapping[c - 48]);}int tar = Integer.parseInt(sb.toString());list.add(new P(n, tar));}list.sort(new Comparator<P>() {@Overridepublic int compare(P o1, P o2) {return o1.target - o2.target;}});int[] res = new int[nums.length];for (int i = 0; i < nums.length; i++) {res[i] = list.get(i).src;}return res;}}class P {int src;int target;public P(int src, int target) {this.src = src;this.target = target;} }

第三題

題目描述

2192. 有向無環圖中一個節點的所有祖先

解題思路

?這是一個深度優先遍歷,在遍歷的時候,可以記錄已經遍歷的節點,避免重復遍歷。

解題代碼

class Solution {private final HashMap<Integer, List<Integer>> map = new HashMap<>();private final HashMap<Integer, List<Integer>> edg = new HashMap<>();public List<List<Integer>> getAncestors(int n, int[][] edges) {// 先把節點加入Map.for (int[] edge : edges) {int start = edge[0];int end = edge[1];List<Integer> l = edg.getOrDefault(end, new ArrayList<Integer>());l.add(start);edg.put(end, l);}List<List<Integer>> res = new ArrayList<>();for (int i = 0; i < n; i++) {// 從 i 開始往上分析。 進行深度有限遍歷List<Integer> list = dfs(i);map.put(i, list);res.add(list);}return res;}private List<Integer> dfs(int n) {if (!edg.containsKey(n)) {// 我是父節點return new ArrayList<>();}if (map.containsKey(n)) {// 此節點已經做過計算,可以直接返回return map.get(n);}// 獲取當前節點的父節點List<Integer> fathers = edg.get(n);HashSet<Integer> temps = new HashSet<>();for (int f : fathers) {temps.addAll(dfs(f));}fathers.addAll(temps);List<Integer> res = new ArrayList<>(new HashSet<>(fathers));Collections.sort(res);map.put(n, res);return res;} }

第四題

題目描述

2193. 得到回文串的最少操作次數

?

解題思路

本題沒有做出來,看了大佬的思路,竟然是個貪心。

由于題目保證原串一定可以變成回文串,那么原串中最多只有一種字母出現奇數次。如果有一種字母出現奇數次,那么將該字母中排在最中間的字符移動到字符串中間,剩下的字符可以轉化為所有字母均出現偶數次的情況。

貪心算法是:每次固定字符串最左邊的字母 aa 不變,找出距離字符串右側最近的 aa,把它交換到字符串最右邊。這樣字符串的頭尾字母就相等了。把字符串的頭尾去掉,就變成了子問題。把所有子問題的答案加起來就是最少交換次數。

作者:tsreaper
鏈接:https://leetcode-cn.com/problems/minimum-number-of-moves-to-make-palindrome/solution/tan-xin-zheng-ming-geng-da-shu-ju-fan-we-h57i/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

解題代碼

class Solution {public int minMovesToMakePalindrome(String s) {int n = s.length();if (n <= 2) {return 0;}char c = s.charAt(0);int len = 0;int i;for (i = n - 1; i >= 0; i--) {if (c == s.charAt(i)) {len = n - i - 1;break;}}String sub;if (i==0){len = len/2;sub = s.substring(1);}else {sub = s.substring(1, i) + s.substring(i + 1, n);}return len + minMovesToMakePalindrome(sub);} }

總結

以上是生活随笔為你收集整理的Leetcode-第 73 场双周赛的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。