Egy n számból álló sorozat (n< 3000) is called Jolly Jumper ha az egymást követő elemek közötti különbségek abszolút értékei felvesznek minden lehetséges értéket 1-től n-1-ig. A definíció azt jelenti, hogy egyetlen egész szám bármely sorozata vidám jumper.
Példák:
Input: 1 4 2 3 Output: True This sequence 1 4 2 3 is Jolly Jumper because the absolute differences are 3 2 and 1. Input: 1 4 2 -1 6 Output: False The absolute differences are 3 2 3 7. This does not contain all the values from 1 through n-1. So this sequence is not Jolly. Input: 11 7 4 2 1 6 Output: True
Az ötlet egy logikai tömb fenntartása az egymást követő elemek abszolút különbségeinek halmazának tárolására.
- Ha két elem közötti abszolút különbség nagyobb, mint n-1 vagy 0, akkor hamis értéket ad vissza.
- Ha egy abszolút különbség megismétlődik, akkor 1 és n-1 közötti abszolút különbség nem lehet jelen ( Galamblyuk elve ) return false.
Az alábbiakban a fenti ötleten alapuló megvalósítás látható.
C++// Program for Jolly Jumper Sequence #include using namespace std; // Function to check whether given sequence is // Jolly Jumper or not bool isJolly(int a[] int n) { // Boolean vector to diffSet set of differences. // The vector is initialized as false. vector<bool> diffSet(n false); // Traverse all array elements for (int i=0; i < n-1 ; i++) { // Find absolute difference between current two int d = abs(a[i]-a[i+1]); // If difference is out of range or repeated // return false. if (d == 0 || d > n-1 || diffSet[d] == true) return false; // Set presence of d in set. diffSet[d] = true; } return true; } // Driver Code int main() { int a[] = {11 7 4 2 1 6}; int n = sizeof(a)/ sizeof(a[0]); isJolly(a n)? cout << 'Yes' : cout << 'No'; return 0; }
Java // Program for Jolly Jumper Sequence import java.util.*; class GFG { // Function to check whether given sequence // is Jolly Jumper or not static boolean isJolly(int a[] int n) { // Boolean vector to diffSet set of differences. // The vector is initialized as false. boolean []diffSet = new boolean[n]; // Traverse all array elements for (int i = 0; i < n - 1 ; i++) { // Find absolute difference // between current two int d = Math.abs(a[i] - a[i + 1]); // If difference is out of range or repeated // return false. if (d == 0 || d > n - 1 || diffSet[d] == true) return false; // Set presence of d in set. diffSet[d] = true; } return true; } // Driver Code public static void main(String[] args) { int a[] = {11 7 4 2 1 6}; int n = a.length; if(isJolly(a n)) System.out.println('Yes'); else System.out.println('No'); } } // This code is contributed by Rajput-Ji
Python3 # Python3 Program for Jolly Jumper # Sequence # Function to check whether given # sequence is Jolly Jumper or not def isJolly(a n): # Boolean vector to diffSet set # of differences. The vector is # initialized as false. diffSet = [False] * n # Traverse all array elements for i in range(0 n-1): # Find absolute difference between # current two d = abs(a[i]-a[i + 1]) # If difference is out of range or # repeated return false. if (d == 0 or d > n-1 or diffSet[d] == True): return False # Set presence of d in set. diffSet[d] = True return True # Driver Code a = [11 7 4 2 1 6] n = len(a) print('Yes') if isJolly(a n) else print('No') # This code is contributed by # Smitha Dinesh Semwal
C# // Program for Jolly Jumper Sequence using System; class GFG { // Function to check whether given sequence // is Jolly Jumper or not static Boolean isJolly(int []a int n) { // Boolean vector to diffSet set of differences. // The vector is initialized as false. Boolean []diffSet = new Boolean[n]; // Traverse all array elements for (int i = 0; i < n - 1 ; i++) { // Find absolute difference // between current two int d = Math.Abs(a[i] - a[i + 1]); // If difference is out of range or repeated // return false. if (d == 0 || d > n - 1 || diffSet[d] == true) return false; // Set presence of d in set. diffSet[d] = true; } return true; } // Driver Code public static void Main(String[] args) { int []a = {11 7 4 2 1 6}; int n = a.Length; if(isJolly(a n)) Console.WriteLine('Yes'); else Console.WriteLine('No'); } } // This code is contributed by PrinciRaj1992
JavaScript <script> // Javascript program for Jolly Jumper Sequence // Function to check whether given sequence is // Jolly Jumper or not function isJolly(a n) { // Boolean vector to diffSet set of // differences. The vector is // initialized as false. let diffSet = new Array(n).fill(false); // Traverse all array elements for(let i = 0; i < n - 1; i++) { // Find absolute difference between // current two let d = Math.abs(a[i] - a[i + 1]); // If difference is out of range or repeated // return false. if (d == 0 || d > n - 1 || diffSet[d] == true) return false; // Set presence of d in set. diffSet[d] = true; } return true; } // Driver Code let a = [ 11 7 4 2 1 6 ]; let n = a.length; isJolly(a n) ? document.write('Yes') : document.write('No'); // This code is contributed by _saurabh_jaiswal </script>
Kimenet:
Yes
Időbeli összetettség: On)
Segédtér :O(n) mivel n méretű vektort használtunk.