You can use a mapping to check whether an address has already been entered instead of iterating through multiple loops.
This is the nested for loops to check for duplicates
You're wasting gas iteraing through multiple loops. You are also rechecking things that have already been checked by checking the entire players array for dupes every time.
Manual review
Create a mapping variable addressesEntered (address entered to bool) and then remove the duplicates check portion of enteredRaffle and instead set the mapping for each address to true in the first loop in the enterRaffle function, as shown in the following changes:
Add mapping:
Remove the duplicates check in enterRaffle and instead add this to the first loop (the one that pushes addresses to the players array):
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.