Datawhale August Team Study (2) - Brossage LeetCode

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.
Insérez la description de l'image ici

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

Insérez la description de l'image ici
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;   
}

Insérez la description de l'image ici


205. Chaînes isomorphes

Insérez la description de l'image ici
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

Insérez la description de l'image ici

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
    Insérez la description de l'image ici

290. La loi des mots

Insérez la description de l'image ici

  • 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))

Insérez la description de l'image ici


349. Intersection de deux tableaux

Insérez la description de l'image ici

  • 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)

Je suppose que tu aimes

Origine blog.csdn.net/qq_48081601/article/details/108231486
conseillé
Classement