LeetCode 86分割链表87扰乱字符串
微信搜一搜:bigsai 專注于Java、數(shù)據(jù)結(jié)構(gòu)與算法,一起進大廠不迷路!
算法文章題解全部收錄在github倉庫bigsai-algorithm,求star!
關(guān)注回復進群即可加入力扣打卡群,歡迎劃水。近期打卡:
LeetCode 73矩陣置零&74搜素二維矩陣&75顏色分類
Leetcode 76最小覆蓋子串&77組合&78子集
LeetCode 79單詞搜索&80刪除排序數(shù)組中的重復項Ⅱ&81.搜索旋轉(zhuǎn)排序數(shù)組Ⅱ
如有幫助,記得一鍵三連!
分割鏈表
題目描述:
給定一個鏈表和一個特定值 x,對鏈表進行分隔,使得所有小于 x 的節(jié)點都在大于或等于 x 的節(jié)點之前。
你應當保留兩個分區(qū)中每個節(jié)點的初始相對位置。
示例:
輸入: head = 1->4->3->2->5->2, x = 3
輸出: 1->2->2->4->3->5
分析:
這題的話也很簡單,它要求將小于x的節(jié)點放到前面,且相對位置不變。我們可以采用兩個鏈表將其分割開來然后再合并,在具體的處理上,可以創(chuàng)建兩個帶頭節(jié)點的鏈表,遍歷這個鏈表,其中一個收集比x小的節(jié)點,另一個收集比x大的節(jié)點,最后組合一下即可。
實現(xiàn)代碼為:
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/ class Solution {public ListNode partition(ListNode head, int x) {ListNode smallhead=new ListNode(0);//頭節(jié)點 0不使用ListNode smallteam=smallhead;//進行遍歷ListNode bighead=new ListNode(0);//頭ListNode bigteam=bighead;//遍歷使用while (head!=null) {if(head.val<x){smallteam.next=head;smallteam=smallteam.next;}else {bigteam.next=head;bigteam=bigteam.next;}head=head.next;}smallteam.next=bighead.next;//拼接bigteam.next=null;//置空return smallhead.next;} }時間的話都是0ms。
擾亂字符串
分析:
題意很清晰,就問你s1能不能轉(zhuǎn)換成s2。本題可以采用遞歸和動態(tài)規(guī)劃的方式,兩者一個是從前往后,一個是從后往前進行遞推。
判斷是否能夠經(jīng)過遞歸交換轉(zhuǎn)換而來,首先兩個字符串s1和s2需要等長,然后其中的元素種類和個數(shù)也需要完全相同才行。(具體實現(xiàn)上可以借助hashmap或者數(shù)組進行計數(shù)統(tǒng)計)。
相同之后可能有很多種劃分需要一一的進行比較,可以遞歸向下進行(要有遞歸信任),分的兩個組合情況有一個可以交換即可認為是true的。
具體實現(xiàn)代碼上,我使用遞歸的方式,通過字符串轉(zhuǎn)成字符數(shù)組優(yōu)化一點速度。
至于動態(tài)規(guī)劃的解題方法,是一個從下往上的遞推過程,實現(xiàn)上需要考慮下邊界初始化和遞推式,這里就不實現(xiàn)啦,有興趣的可以參考官網(wǎng)。
結(jié)語
原創(chuàng)不易,bigsai請你幫兩件事幫忙一下:
star支持一下, 您的肯定是我在平臺創(chuàng)作的源源動力。
微信搜索「bigsai」,關(guān)注我的公眾號,不僅免費送你電子書,我還會第一時間在公眾號分享知識技術(shù)。加我還可拉你進力扣打卡群一起打卡LeetCode。
記得關(guān)注、咱們下次再見!
總結(jié)
以上是生活随笔為你收集整理的LeetCode 86分割链表87扰乱字符串的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5张图搞懂Java深浅拷贝
- 下一篇: LeetCode 88合并两个有序数组8