Datawhale August Team Study (2) - Brossage LeetCode
-
- 35. Rechercher l'emplacement d'insertion
- 202. Numéro heureux
- 205. Chaînes isomorphes
- 242. Mots ectopiques de lettre valide
- 290. La loi des mots
- 349. Intersection de deux tableaux
- 350. L'intersection de deux tableaux 2
- 410. Fractionner la valeur maximale du tableau
- 451. Trier par fréquence de caractères
- 540. Un seul élément dans un tableau ordonné
Cette fois, j'ai rejoint l'organisation datawhale en août pour étudier en équipe, et j'ai choisi le groupe de LeetCode pour brosser quelques questions, afin que mon esprit ne soit pas si rigide
. Lien Leetcode https://leetcode-cn.com/
35. Rechercher l'emplacement d'insertion
Problème de recherche très simple, le tableau donné est déjà trié, utilisez donc directement la recherche binaire.
int searchInsert(int* nums, int numsSize, int target)
{
if(numsSize==0)
return 0;
int low=0,high=numsSize-1,index=numsSize/2;
while(low<high)
{
if(target==nums[index]) return index;
if(target>nums[index]) low=index+1;
else high=index-1;
index=(high+low)/2;
}
if(target>nums[index]) return index+1;
return index;
}
202. Numéro heureux
Solution simple et brute
bool isHappy(int n)
{
while(n != 1)
{
int ans = 0;
while(n)
{
ans += pow(n % 10 , 2);
n /= 10;
}
if(ans == 4)
return false;
n = ans;
}
return true;
}
205. Chaînes isomorphes
Je ne m'attendais pas à rencontrer un problème que j'avais déjà résolu
bool isIsomorphic(char * s, char * t)
{
int flag=0;
int num = 0;
int x1[128] = {
0 }, x2[128] = {
0 };
for (int i = 0; s[i] != 0; i++)
{
num++;
if(x1[(int)s[i]]==0)
x1[(int)s[i] ] =num;
if (x2[(int)t[i] ] == 0)
x2[(int)t[i] ] = num;
}
for (int n = 0; s[n] != 0; n++)
{
if (x1[(int)s[n]] != x2[(int)t[n] ])
flag = 1;
}
if (flag == 1)
return false;
else
return true;
}
242. Mots ectopiques de lettre valide
bool isAnagram(char *s, char *t)
{
int i, x[26] = {
0 }, y[26] = {
0 };
for (i = 0; s[i] != '\0'; i++) x[s[i] - 'a']++;
for (i = 0; t[i] != '\0'; i++) y[t[i] - 'a']++;
for (i = 0; i < 26; i++)
if (x[i] != y[i]) return false;
return true;
}
- C'est aussi un sujet très simple, enregistrez les lettres et le nombre correspondant, comparez
290. La loi des mots
- Pour les questions liées aux chaînes, il est trop inefficace d'utiliser le langage C (l'efficacité de l'écriture de code)
class Solution(object):
def wordPattern(self, pattern, str):
"""
:type pattern: str
:type str: str
:rtype: bool
"""
s1 = str.split()
return len(s1)==len(pattern) and len(set(zip(pattern, s1))) == len(set(list(pattern))) == len(set(s1))
349. Intersection de deux tableaux
- Une autre question est écrite en python et peut être complétée rapidement
class Solution(object):
def intersection(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
return list(set(nums1)&set(nums2))
350. L'intersection de deux tableaux 2
- C'est toujours la résolution de problèmes python, bien que l'efficacité soit assez faible par rapport aux autres
class Solution(object):
def intersect(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
inter = set(nums1) & set(nums2)
l = []
for i in inter:
l += [i] * min(nums1.count(i), nums2.count(i))
return l
410. Fractionner la valeur maximale du tableau
- Une question de niveau difficile, humble j'ai recopié la réponse, la réponse vient du patron de la zone de commentaire Celia
class Solution(object):
def splitArray(self, nums, m):
"""
:type nums: List[int]
:type m: int
:rtype: int
"""
# max(nums), sum(nums)
if len(nums) == m:
return max(nums)
lo, hi = max(nums), sum(nums)
while(lo < hi):
mid = (lo + hi) // 2 # 最大和
#------以下在模拟划分子数组的过程
temp, cnt = 0, 1
for num in nums:
temp += num
# cnt += 1
if temp > mid:#说明当前这个子数组的和已经超过了允许的最大值mid,需要把当前元素放在下一个子数组里
temp = num
cnt += 1
# print temp, cnt, mid
#------以上在模拟划分子数组的过程
if cnt > m: #说明分出了比要求多的子数组,多切了几刀,说明mid应该加大,这样能使子数组的个数减少
lo = mid + 1
elif cnt <= m:
hi = mid
return lo
451. Trier par fréquence de caractères
class Solution(object):
def frequencySort(self, s):
c = collections.Counter(s)
tmp = [[k, v] for k, v in c.items()]
tmp.sort(key=lambda x: x[1], reverse=True)
res = ""
for i in tmp:
res += i[0] * i[1]
return res
- méthode de résolution de problèmes de package python
540. Un seul élément dans un tableau ordonné
- Résolution de problèmes violents
class Solution(object):
def singleNonDuplicate(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
return sum(set(nums))*2 - sum(nums)