本部落格目錄
給定乙個單向鍊錶的頭節點head,節點的值型別是整型,再給定乙個整數p。實現乙個調整鍊錶的函式,將鍊錶調整為左部分都是值小於 p的節點,中間部分都是值等於p的節點,右部分都是值大於 p的節點。
空間複雜度為o(n)的演算法
//建立輔助陣列,先在陣列上排序,之後連線
//空間複雜度o(n)
listnode* listpartition1(listnode* head, int num)
int i = 0;
listnode* cur = head;
vectorarr;
while (cur != null)
arrpartition(arr, num);
for (i = 1; i != arr.size(); i++)
arr[i - 1]->next = null;
return arr[0];
}void arrpartition(vectorarr, int num)
else if (arr[cur]->val < num)
else }}
void (vectorarr, int i, int j)
空間複雜度為o(1)的演算法
//將鍊錶分成三個部分:
//分別為小於p、等於p、大於p
//分別用一串鍊錶連線起來,最終,連線成乙個鍊錶
listnode* listpartition2(listnode* head, int num)
else
} else if (head->val > num)
else
} else
else
} head = next;
} if (st != null)
if (et != null)
return sh != null ? sh : eh != null ? eh : bh;
}
listnode* copylistwithrand(listnode* head)
listnode* cur = head;
while (cur != null)
cur = head;
while (cur != null)
cur = head;
listnode* clonehead = head->next;
while (cur->next != null)
return clonehead;
}
單鏈表可能有環,也可能無環。給定兩個單鏈表的頭節點 head1和head2,這兩個鍊錶可能相交,也可能不相交。請實現乙個函式, 如果兩個鍊錶相交,請返回相交的第乙個節點;如果不相交,返回null 即可。
/*
這個問題要考慮幾種情況:
1. 兩個鍊錶都是單鏈表,判斷入環節點
2. 兩個鍊錶都有環,判斷入環節點
3. 乙個鍊錶有環,乙個鍊錶無環,則一定不想交。因為它們都是單鏈表。
*/listnode* findfirst(listnode* head1, listnode* head2)
else if (loop1 != null && loop2 != null)
else
return firstnode;
}//判斷乙個鍊錶是否有環
//返回入環的節點
listnode* isloop(listnode* head)
listnode* slow = head->next;
listnode* fast = head->next->next;
while (slow != fast)
slow = slow->next;
fast = fast->next->next;
} fast = head;
while (slow != fast)
return slow;
}//都無環的情況
listnode* noloop(listnode* head1, listnode* head2)
int n = 0;
listnode* cur1 = head1;
listnode* cur2 = head2;
while (cur1->next != null)
while (cur2->next != null)
if (cur1 != cur2)
cur1 = n > 0 ? head1 : head2;
cur2 = cur1 == head1 ? head2 : head1;
n = abs(n);
while (n != 0)
while (cur1 != cur2)
return cur1;
}//都有環的情況
listnode* bothloop(listnode* head1, listnode* head2, listnode* loop1, listnode* loop2)
while (cur2 != loop2)
cur1 = n > 0 ? head1 : head2;
cur2 = cur1 == head1 ? head2 : head1;
n = abs(n);
while (n != 0)
while (cur1 != cur2)
return cur1;
} else
cur1 = cur1->next;
} return null;
}}
牛客網左程雲演算法課 日常演算法題(三)
1.對稱二叉樹 給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 1,2,2,3,4,4,3 是對稱的。但是下面這個 1,2,2,null,3,null,3 則不是映象對稱的 想法 直接遞迴遍歷判斷是否相等即可 public boolean issymmetric treenode root p...
演算法題摘錄三
1 判斷給定陣列是不是二叉搜尋樹的前 後序遍歷序列 二叉搜尋樹的特點是 左子樹的值 根結點值 右子樹的值。而前 後序遍歷序列的首 尾數是根結點,依據根結點可以把陣列其餘部分劃分為左子樹 右子樹,然後根據左右子樹序列又可以遞迴地確定父結點並劃分子樹.如果能遞迴遍歷完整個陣列則說明合法,否則非法。下面是...
Leetcode演算法題 三
awk nr 10 file.txt nr表示行數 sed n 10p file.txt n表示只輸出匹配行,p表示print tail n 10 file.txt head n 1 從tail表示讀取之後的行,head表示之前的行 tail n 10 file.txt head 1題目總結 nr ...