問題描述 :
給定煉表頭結點 head,該鍊錶上的每個結點都有乙個唯一的整型值 。
同時給定列表 g,該列表是上述鍊錶中整型值的乙個子集。
返回列表 g 中元件的個數,這裡對元件的定義為:鍊錶中一段極長連續結點的值(該值必須在列表 g 中)構成的集合。極長的含義是:這段連續結點的前面或後面結點不屬於g。
示例 1:
輸入:head: 0->1->2->3
g = [0, 1, 3]
輸出: 2
解釋:鍊錶中,0 和 1 是相連線的,且 g 中不包含 2,所以 [0, 1] 是 g 的乙個元件,同理 [3] 也是乙個元件,故返回 2。
示例 2:
輸入:head: 0->1->2->3->4
g = [0, 3, 1, 4]
輸出: 2
解釋:鍊錶中,0 和 1 是相連線的,3 和 4 是相連線的,所以 [0, 1] 和 [3, 4] 是兩個元件,故返回 2。
說明:如果 n 是給定鍊錶 head 的長度,1 <= n <= 10000。
鍊錶中每個結點的值所在範圍為 [0, n - 1]。
1 <= g.length <= 10000
g 是鍊錶中所有結點的值的乙個子集.
可使用以下**,完成其中的numcomponents函式,其中形參head指向無頭結點單鏈表,g為列表,返回元件的個數。
#include
#include
using namespace std;
struct listnode
int val;
listnode *next;
listnode() : val(0), next(null) {}
listnode(int x) : val(x), next(null) {}
listnode(int x, listnode *next) : val(x), next(next) {}
class solution listnode *createbytail()
listnode *head;
listnode *p1,*p2;
int n=0,num;
int len;
cin>>len;
head=null;
while(n>num)
return head;
int main()
vectorg;
int m,data,res;
listnode* head = createbytail();
cin>>m;
for(int i=0; i>data;
g.push_back(data);
}res=solution().numcomponents(head,g);
cout《輸入說明 :
首先輸入鍊錶長度len,然後輸入len個整數,以空格分隔。
再輸入g的大小m,然後輸入m個整數,以空格分隔。
輸出說明 :
輸出乙個整數,表示結果。
輸入範例 :
40 1 2 3
30 1 3
輸出範例 :
/*注意的一點:這裡的鍊錶都是有序鍊錶,但是題目中沒有說。。。
思路:將vector中的每個值複製到set中,然後從煉表頭節點開始判斷,如果當前頭節點的值在set中,就繼續判斷下乙個節點的值是否在set中,只有當下乙個節點為null,或者下乙個節點的值不在set中,元件數才加1
*/
#include
#include
#include
using
namespace std;
struct listnode
listnode
(int x)
:val
(x),
next
(null)}
;class
solution
} head = head-
>next;
}return cnt;}}
;listnode *
createbytail()
return head;
}void
displaylink
(listnode *head)
cout<<
"tail\n";}
intmain()
res=
solution()
.numcomponents
(head,g)
; cout
}
LeetCode81 搜尋旋轉排序陣列 II
二分查詢,但是下面的 在測試用例 3,1 1中出錯。package 牛客刷題.leetcode.查詢.search in rotated sorted array ii created by administrator on 2018 6 28 0028.public class solution ...
LeetCode 81 搜尋旋轉排序陣列 II
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,0,1,2,2,5,6 可能變為 2,5,6,0,0,1,2 編寫乙個函式來判斷給定的目標值是否存在於陣列中。若存在返回true,否則返回false。示例 1 輸入 nums 2,5,6,0,0,1,2 target 0輸出 t...
leetcode81 搜尋旋轉排序陣列 II
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,0,1,2,2,5,6 可能變為 2,5,6,0,0,1,2 編寫乙個函式來判斷給定的目標值是否存在於陣列中。若存在返回 true,否則返回 false。示例 1 輸入 nums 2,5,6,0,0,1,2 target 0 輸...