時間限制:1秒 空間限制:32768k 熱度指數:156582
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。解題思路:
/*
struct treenode
};*/
class solution
return prootoftree;
}void help(treenode* cur,treenode*& pre)
};
時間限制:1秒 空間限制:32768k 熱度指數:241299本題知識點: 字串
輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。解題思路:輸入乙個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。
# -*- coding:utf-8 -*-
import itertools
class solution:
def permutation(self, ss):
# write code here
if not ss:
return
return sorted(list(set(map(''.join, itertools.permutations(ss)))))
時間限制:1秒 空間限制:32768k 熱度指數:210161本題知識點: 陣列
陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。解題思路:
# -*- coding:utf-8 -*-
class solution:
def morethanhalfnum_solution(self, numbers):
# write code here
if not numbers:
return 0
result = numbers[0]
times = 1
length = len(numbers)
for i in range(1, length-1):
print times
if times == 0:
result = numbers[i+1]
elif result == numbers[i+1]:
times += 1
else:
times -= 1
if numbers.count(result)*2 > length:
return result
return 0
時間限制:1秒 空間限制:32768k 熱度指數:268814本題知識點: 陣列
輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,解題思路:解法一:(時間複雜度為o(n), 只有當我們可以修改輸入的陣列時可用)
class solution
input[beg] = key;
return beg;
}vectorgetleastnumbers_solution(vectorinput, int k) ;
int low = 0;
int high = input.size()-1;
int pos = partion(input, low, high);
while (pos != k - 1)
else
}vectorres(input.begin(), input.begin() + k);
return res;}};
解法二;(時間複雜度為o(nlogk)的演算法,特別適合處理海量資料)
class solution
sort_heap(result.begin(),result.end());
return result;}};
時間限制:1秒 空間限制:32768k 熱度指數:148691本題知識點: 陣列
hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如:,連續子向量的最大和為8(從第0個開始,到第3個為止)。給乙個陣列,返回它的最大連續子串行的和,你會不會被他忽悠住?(子向量的長度至少是1)解題思路:
class solution
return maxsum;}};
時間限制:1秒 空間限制:32768k 熱度指數:117393
求出1~13的整數中1出現的次數,並算出100~1300的整數中1出現的次數?為此他特別數了一下1~13中包含1的數字有1、10、11、12、13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數(從1 到 n 中1出現的次數)。解題思路:(一)採取暴力解決,效率比較低下,時間複雜度為o(nlogn)
class solution
}return count;}};
(二)
# -*- coding:utf-8 -*-
class solution:
def numberof1between1andn_solution(self, n):
# write code here
'''思路:x∈[1,9],0不適用
從 1 至 10,在它們的個位數中,任意的 x 都出現了 1 次。
從 1 至 100,在它們的十位數中,任意的 x 都出現了 10 次。
從 1 至 1000,在它們的百位數中,任意的 x 都出現了 100 次。
依此類推,從 1 至 10^i ,在它們的左數第二位(右數第 i 位)中,任意的 x 都出現了 10^(i−1) 次。
'''x=1
if n<0 or x<=0 or x>9:
return 0
high=-1;low=-1;time=0
i=1#i為數字n從右往左的第i位
while high!=0:
high = n / (10 ** i) # 拿到高位
temp = n % (10 ** i)
occur = temp / (10 ** (i - 1)) # 拿到第i位上的數字
low = n % (10 ** (i - 1))#拿到i的低位
time+=high*(10**(i-1))#先算基礎值,再加上低位的進行補充
if occur>x:#比x大,把第i位的次數加上
time=time+10**(i-1)
elif occur==x:
time=time+low+1
i+=1
return time
每日做題之劍指offer(四)
時間限制 1秒 空間限制 32768k 熱度指數 177188 本題知識點 棧 定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式 時間複雜度應為o 1 解題思路 class solution void pop int top int min private stacksta...
出鞘之劍指offer 第14題 剪繩子
給你一根長度為n的繩子,請把繩子剪成m段 m和n都是整數,n 1並且m 1 每段繩子的長度記為k 0 k 1 k m 請問k 0 k 1 k m 可能的最大乘積是多少?使用動態規劃。package offer.xzs.fourteenth public class demo01 public sta...
CPP之劍指 Offer 66 構建乘積陣列
給定乙個陣列 a 0,1,n 1 請構建乙個陣列b 0,1,n 1 其中 b 中的元素 b i a 0 a 1 a i 1 a i 1 a n 1 不能使用除法。根據題目描述,函式名是constructarr,函式輸入是vector a,返回值應當是新的陣列 vector ret。陣列a中的元素對應...