Il semble que des tests de codage soient menés à l'étranger lors d'entretiens d'ingénieurs, et dans de nombreux cas, l'essentiel est de mettre en œuvre des fonctions et des classes spécifiques en fonction du thème.
Apparemment, de nombreux ingénieurs prennent des mesures sur le site appelé LetCode.
C'est un site qui forme la puissance de l'algorithme qui peut résister au test de codage effectué au début, et c'est un chemin inévitable pour ceux qui veulent faire carrière dans une entreprise de technologie à l'étranger.
Je l'ai écrit en grand, mais je n'ai pas l'intention d'avoir une telle interview pour le moment.
Cependant, en tant qu'ingénieur informatique, il serait préférable d'avoir le même niveau de puissance d'algorithme qu'une personne, alors j'aimerais résoudre le problème de manière irrégulière et écrire la méthode que je pensais à l'époque sous forme de mémo.
Je le résolve avec Python3.
Table de codes Leet commençant à zéro
Dernière fois Leet Code Day71 "1496. Path Crossing" à partir de zéro
À l'heure actuelle, je donne la priorité au moyen des 100 questions les plus appréciées. Easy a été résolu, donc si vous êtes intéressé, veuillez vous rendre à la table.
Twitter Je le fais.
** Blog technique Commencé! !! ** ** Je pense que la technologie écrira sur LetCode, Django, Nuxt, etc. ** C'est plus rapide à mettre à jour **, merci pour votre coopération!
1498. Number of Subsequences That Satisfy the Given Sum Condition Le niveau de difficulté est moyen.
Le problème est donné un tableau d'entiers «nums» et un entier «cible». Renvoie le nombre de sous-colonnes non vides de sorte que la somme des valeurs minimale et maximale de nums soit inférieure ou égale à la valeur cible.
La réponse est peut-être trop grande, elle renvoie donc une opération de reste de 10 ^ 9 + 7.
Example 1:
Input: nums = [3,5,6,7], target = 9 Output: 4 Explanation: There are 4 subsequences that satisfy the condition. [3] -> Min value + max value <= target (3 + 3 <= 9) [3,5] -> (3 + 5 <= 9) [3,5,6] -> (3 + 6 <= 9) [3,6] -> (3 + 6 <= 9)
Example 2:
Input: nums = [3,3,6,8], target = 10 Output: 6 Explanation: There are 6 subsequences that satisfy the condition. (nums can have repeated numbers). [3] , [3] , [3,3], [3,6] , [3,6] , [3,3,6]
Example 3:
Input: nums = [2,3,3,4,6,7], target = 12 Output: 61 Explanation: There are 63 non-empty subsequences, two of them don't satisfy the condition ([6,7], [7]). Number of valid subsequences (63 - 2 = 61).
Example 4:
Input: nums = [5,2,4,1,7,6,8], target = 16 Output: 127 Explanation: All non-empty subset satisfy the condition (2^7 - 1) = 127
Constraints:
- 1 <= nums.length <= 10^5
class Solution:
def numSubseq(self, nums: List[int], target: int) -> int:
ans,mod = 0,10**9+7
nums.sort()
for i,j in enumerate(nums):
if target < j*2:
break
b = bisect.bisect(nums,target-j,lo=i)
ans += pow(2, b-i-1, mod)
return ans % mod
# Runtime: 888 ms, faster than 82.84% of Python3 online submissions for Number of Subsequences That Satisfy the Given Sum Condition.
# Memory Usage: 25.2 MB, less than 100.00% of Python3 online submissions for Number of Subsequences That Satisfy the Given Sum Condition.
Comme spécifié dans l'énoncé du problème, j'ai écrit que mod (10 ** 9 + 7)
a été spécifié en premier, puis une dichotomie a été effectuée dans l'instruction for.
Les arguments de la bissectrice sont les suivants.
bisect(a,b,(lo,hi))
a:liste
b:Valeur à insérer
lo:Limite inférieure de la plage de recherche
hi:Limite supérieure de la plage de recherche
Comme beaucoup d'entre vous qui ont lu cet article le savent, la dichotomie nécessite qu'elle soit triée, donc la liste est triée au début du code. D'après l'exemple, il semble qu'il y ait eu de nombreux cas où il n'a pas été trié ...
En passant, 10 ** 9 + 7 sort beaucoup lors de la programmation d'autres compétitions (pas limité à un car il y a de nombreux sites). Certaines personnes ont écrit des articles explicatifs faciles à comprendre à ce sujet, donc si vous êtes intéressé, faites-le aussi.
Alors c'est tout pour cette fois. Je vous remercie pour votre travail acharné.
Recommended Posts