2016-04-21 14 views
1

Gegeben ein Array von ganzen Zahlen num und eine ganze Zahl k. Finde heraus, ob es im Array zwei verschiedene Indizes i und j gibt, so dass nums [i] = nums [j] und der Unterschied zwischen i und j höchstens k ist.Algorithmus: Überprüfung auf Duplizierung in Swift-Array

Es soll mir wahr geben, aber es gibt mir falsch.

Jede Hilfe, ich schätze es. Ich danke dir sehr.

class Solution 
{ 
    func containsNearbyDuplicate (nums: [Int], _ k: Int) -> Bool 
    { 
     var dict = [Int:Int]() 
     for i in 0..<nums.count 
     { 
      if dict[nums[i]] != nil 
      { 
       if dict.values.contains(nums[i]) && (i - dict[nums[i]]! <= k) 
       { 
        return true 
       } 
       else 
       { 
        dict[i] = nums[i] 
       } 
      } 

     } 
     return false 
    } 
} 

let test1 = Solution() 
//var haha = [1,2,1,5,6,7,6,8,7,5] 
//var haha = [1] 
//var haha = [1,2] 
//var haha = [1,2,3,5,6,8] 
var haha = [-1,-1] 
var result = test1.containsNearbyDuplicate(haha,1) 
print(result) 

Antwort

0

versuchen diese:

class Solution { 
    func containsNearbyDuplicate (nums: [Int], _ k: Int) ->Bool { 
     var dict = [Int:Int]() 
     for i in 0..<nums.count { 
      if let firstIndex = dict[nums[i]] where i - firstIndex <= k { 
       return true 
      } 
      dict[nums[i]] = i 
     } 
     return false 
    } 
} 
+0

Vielen Dank! Das funktioniert perfekt! Bin dankbar. – Tang

+0

Ich habe deine Antwort an andere Community weitergegeben. Hoffnung kann jemand anderem helfen. Nochmals vielen Dank für Ihre Hilfe! – Tang

+0

Kein Problem. Bitte :) – iyuna

1

Sie nie etwas zu dict hinzufügen:

func containsNearbyDuplicate (nums: [Int], _ k: Int) ->Bool 
{ 

    var dict = [Int:Int]() 

    for i in 0..<nums.count 
    { 

     if dict[nums[i]] != nil // This prevents anything to be added to dict 
     { 
      if dict.values.contains(nums[i]) && (i - dict[nums[i]]! <= k) 
      { 
       return true 
      } 

      else 
      { 
       dict[i] = nums[i] // This is never executed because of the above if above 
      } 
     } 
    } 
    return false 
} 
+0

Sie so viel Dank! Ich werde es mir ansehen! Schätzen! – Tang

Verwandte Themen