1 <= nums.length <= 1000
-231 <= nums[i] <= 231 - 1
榪欓鎸夌収鎬濊礬鏉ヨ錛屽ぇ姒傛槸Medium闅懼害鐨凞P錛岀敤python涔熺壒鍒柟渚垮ソ鍐欙紝浜庢槸闂茶亰鏃犺闈炶鐢–鍐欎簡涓閬嶏紝灝辯湡鐨勫彉Hard妯″紡浜嗭紝鎼炰簡n嬈℃墠AC錛屽彂鐜版灉鐒舵病鏈夊埆浜虹敤C鏉ュ啓銆傘? =||
鎬葷殑鎬濊礬錛歞p[i][dif]淇濆瓨澶勭悊鍒扮i涓暟錛屼笖鐩擱偦鏁板樊鍊間負dif鐨勫瓙鏁板垪涓暟錛宒p鏇存柊錛?br />for i in range(len(nums)):
for j in range(i):
dif = nums[j] - nums[i]
dp[i][dif] += dp[j][dif] + 1
ans += dp[j][dif]
Python寰堝ソ鍐欙紝鐢╠ict淇濆瓨鎵鏈夊彲鑳界殑dif鍊煎氨琛岋細
1 #446
2 #Runtime: 2028 ms
3 #Memory Usage: 74.3 MB
4
5 class Solution(object):
6 def numberOfArithmeticSlices(self, nums):
7 """
8 :type nums: List[int]
9 :rtype: int
10 """
11 dp = [defaultdict(int) for _ in range(len(nums))]
12 ans = 0
13 for i in range(len(nums)):
14 for j in range(i):
15 dif = nums[j] - nums[i]
16 dp[i][dif] += dp[j][dif] + 1
17 ans += dp[j][dif]
18 return ans
C璇█鐗堬紝鎬濊礬鍚屼笂錛屼絾鍥犱負C閲岄潰娌℃湁濂界敤鐨刣ict錛屾墍浠ョ敤浜咹ash錛孡eetCode鏀寔uthash錛屽彟澶栧鏋滅洿鎺ash錛岄偅涔坉if鐨勫彲鑳芥т細闈炲父澶э紙cnt淇濆瓨鎵鏈塪if鐨勫彲鑳芥ф暟閲忥級錛宒p鏁扮粍娌℃硶寮閭d箞澶э紝浜庢槸錛屽彧淇濆瓨鐪熺殑褰㈡垚浜?涓垨浠ヤ笂鏁板瓧鐨勭瓑宸暟鍒楃殑dif鍊鹼紙鐢╟nt2鏉ヤ繚瀛樼鍚堣繖鏍鋒潯浠剁殑dif鍊肩殑鏁伴噺錛夛紝鍦ㄥ紑dp鏁扮粍鐨勬椂鍊欑浜岀淮寮澶氬ぇ涔熸湁涓鐐瑰皬trick
浜や笂鍘葷殑緇撴灉錛?br />Runtime: 799 ms, faster than 100.00% of C online submissions for Arithmetic Slices II - Subsequence.
Memory Usage: 240.9 MB, less than 100.00% of C online submissions for Arithmetic Slices II - Subsequence.
Accepted Solutions Runtime Distribution
Sorry. We do not have enough accepted submissions to show distribution chart.
Accepted Solutions Memory Distribution
Sorry. We do not have enough accepted submissions to show distribution chart.
Invite friends to challenge Arithmetic Slices II - Subsequence
1 //446
2 //Runtime: 799 ms
3 //Memory Usage: 240.9 MB
4
5 struct hashTable {
6 long long key;
7 int val;
8 int init;
9 UT_hash_handle hh;
10 };
11
12 struct hashTable* dict;
13
14 struct hashTable* find(long long k) {
15 struct hashTable* t;
16 HASH_FIND(hh, dict, &k, sizeof(long long), t);
17 return t;
18 }
19
20 int min(int a, int b) {
21 return a<b?a:b;
22 }
23
24 void insert(long long k, int v, int id) {
25 struct hashTable* t = malloc(sizeof(struct hashTable));
26 t->key = k;
27 t->val = v;
28 t->init = id;
29 HASH_ADD(hh, dict, key, sizeof(long long), t);
30 }
31
32 int numberOfArithmeticSlices(int* nums, int numsSize){
33 int ans = 0;
34 int cnt = 0;
35 int idx[numsSize*numsSize];
36 int cnt2 = 0;
37 int dp[numsSize][min(numsSize*numsSize,(int)10000000/numsSize)];
38 memset(dp, 0, sizeof(dp));
39 memset(idx, -1, sizeof(idx));
40 dict = NULL;
41 for(int i = 0; i < numsSize; ++i) {
42 for(int j = 0; j < i; ++j) {
43 long long dif = (long long)nums[j] - (long long)nums[i];
44 struct hashTable* it = find(dif);
45 if(it == NULL) {
46 insert(dif, cnt, i);
47 ++cnt;
48 }
49 else {
50 if(idx[it->val] == -1) {
51 idx[it->val] = cnt2;
52 dp[it->init][cnt2] = 1;
53 dp[i][cnt2] += dp[j][cnt2] + 1;
54 ans += dp[j][cnt2];
55 ++cnt2;
56 }
57 else {
58 dp[i][idx[it->val]] += dp[j][idx[it->val]] + 1;
59 ans += dp[j][idx[it->val]];
60 }
61 }
62
63 }
64 }
65 return ans;
66 }

]]>