力扣部分思路總結(解題記錄)

2021-09-28 22:42:31 字數 1515 閱讀 2207

題號 771(簡單題)

描述:查詢s字串中每乙個元素是否在j**現,並求和

思路:string find 函式 或者 hash結構

int count = 0;

int a[150] = ;

for(auto i:j)

for(auto i:s)

}/*for(auto i:s)

}*/return count;

題號1104(中等題)

描述:一條龍二叉樹尋路問題 

方法一:需要注意的點,由於是一條龍的順序,所以不能直接進行除以二的操作以查詢父節點,需要進行轉換

轉換的方法是,t = a + b -x     a = 2^level-1   b = 2^(level-1)  x為元素值 t為父節點

int level = (log(label) / log(2)) + 1;//4

int a;

vectorpath(level);

path[level-1] = label;//p[3]=14

level = level-1;//3

while(level!=0)

else

level--;

label=a;

}path[0] = 1;

return path;

方法二:位運算

因為以1為根節點層次編號的滿二叉樹可以對應到位的表示,所以用位運算的思路即可。

因為每層的順序在變,所以每次需要對首位外的其它位取反。

舉例14=1110b,

先將14右移,變為111b,然後對除第一位外所有位取反變為100b,即它的根節點4,

同理100b,右移變為10b,對除第一位外所有位取反變為11b,即它的根節點3

一直到1結束。

**後期補上

題號 1122(簡單題)

描述:給你兩個陣列,arr1 和 arr2,

arr2 中的元素各不相同

arr2 中的每個元素都出現在 arr1 中

對 arr1 中的元素進行排序,使 arr1 中項的相對順序和 arr2 中的相對順序相同。未在 arr2 **現過的元素需要按照公升序放在 arr1 的末尾。

思路一:最弱智的想法,時間複雜度o(n*m),對兩個vector進行掃瞄,然後看是否在arr2**現,如果出現的話,放入vector res中,最後把沒出現過的同意放到末尾處,未出現的元素要求公升序

思路二:類似於771的hash思路,以空間換時間

vectorpos(1001);

for(auto i:arr1) ++pos[i];

for(auto i:arr2) pos[i] *= -1;

int cur=0;

for(int i=0;i0)

}return arr1;

題號:1105(中等)

描述:動態規劃,記住已解出的子問題的最優解

思路:

力扣部分刷題記錄

1.兩數之和 思路 暴力遍歷 class solution vectorres return res 2.兩數相加 思路 遍歷鍊錶 definition for singly linked list.struct listnode class solution if c return res nex...

力扣解題思路 打家劫舍

思路 題目 你是乙個專業的小偷,計畫偷竊沿街的房屋,每間房內都藏有一定的現金。這個地方所有的房屋都圍成一圈,這意味著第乙個房屋和最後乙個房屋是緊挨著的。同時,相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在...

力扣解題思路 素數

首先,如何判斷乙個數是否為素數呢,首先我們知道最小的素數是2,那麼我們從2開始判斷該數是否能找到被除數即可,完整 如下 public boolean isprimenum int i return true 思路 統計所有小於非負整數 n 的質數的數量。那麼這一題我們需要對每個小於n的數進行判斷一次...