class Solution { func nextGreaterElement(_ nums1: [Int], _ nums2: [Int]) -> [Int] { var stack: [Int] = [] // Int是存数字在nums2的位置 var pairs: [Int: Int] = [:] // 存储元素&元素下一大元素 var result: [Int] = [] // 存储下一大元素 // 1、遍历nums2,找出每个数字的对应的下一大元素,并储存为键值对pairs for now in 0 ..< nums2.count { // 找到下一大元素时,遍历单调栈 while let last = stack.last, nums2[last] < nums2[now] { let number = nums2[last] let numberLastBig = nums2[now] pairs[number] = numberLastBig stack.removeLast() } stack.append(now) } // 2、遍历nums1,将nums1作为键,在pairs中寻找其对应的值 for num in nums1 { let temp = pairs[num] ?? -1 result.append(temp) } return result } }
首先,检查对象所属的类,以查看是否在该类中使用特定名称显式地定义了方法。如果是,这就是我们使用的方法。如果没有定义,则选中父类。如果这里定义了方法,就用它。如果没有,搜索仍在继续。 父类会被检查,直到发生以下两种情况之一:要么找到包含指定方法的类,要么在返回根类之后没有找到该方法。如果第一个发生了,一切都准备好了;如果出现第二种情况,就会出现问题,并生成如下警告消息: warning: ‘ClassB’ may not respond to ‘-inity’
class Solution { func dailyTemperatures(_ T: [Int]) -> [Int] { var waitDays = [Int]() var temperatures = T for t in temperatures { // 遍历第一天以外的温度 temperatures.removeFirst() var hasHigherTemp = false for index in temperatures.indices { let otherT = temperatures[index] if (otherT > t) { hasHigherTemp = true waitDays.append(index+1) break } } // 判断是否有更高温度 if (!hasHigherTemp) { waitDays.append(0) } } return waitDays } }
+ (void)addCount { static NSInteger count = 100; count ++; NSLog(@"static value is %ld", (long)count); }
@end
其输出结果为:
1 2 3 4 5
2015-12-07 17:41:33.397 StaticDemo[80984:2870442] static value is 101 2015-12-07 17:41:33.398 StaticDemo[80984:2870442] static value is 102 2015-12-07 17:41:33.398 StaticDemo[80984:2870442] static value is 103 2015-12-07 17:41:33.398 StaticDemo[80984:2870442] static value is 104 2015-12-07 17:41:33.398 StaticDemo[80984:2870442] static value is 105
int main (int argc, char * argv[]) { @autoreleasepool { int number; NSLog (@"Type in your number: "); scanf ("%i", &number); if ( number < 0 ) number = -number; NSLog (@"The absolute value is %i", number); } return 0; }
int main (int argc, char * argv[]) { @autoreleasepool { double value1, value2; char operator; Calculator *deskCalc = [[Calculator alloc] init]; NSLog (@"Type in your expression."); scanf ("%lf %c %lf", &value1, &operator, &value2); [deskCalc setAccumulator: value1]; switch ( operator ) { case '+': [deskCalc add: value2]; break; case '-': [deskCalc subtract: value2]; break; case '*': [deskCalc multiply: value2]; break; case '/': [deskCalc divide: value2]; break; default: NSLog (@"Unknown operator."); break; } NSLog (@"%.2f", [deskCalc accumulator]); } return 0; }
Boolean变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
int main (int argc, char * argv[]) { @autoreleasepool { int p, d, isPrime;
for ( p = 2; p <= 50; ++p ) { isPrime = 1; for ( d = 2; d < p; ++d ) if ( p % d == 0 ) isPrime = 0; if ( isPrime != 0 ) NSLog (@"%i ", p); } } return 0; }
int main (int argc, char * argv[]) { @autoreleasepool { int n, triangularNumber; triangularNumber = 0; for ( n = 1; n <= 200; n = n + 1 ) triangularNumber += n; NSLog (@"The 200th triangular number is %i", triangularNumber); } return 0; }
其中 for ( n = 1; n <= 200; n = n + 1 ) 也可以改为 for ( n = 1; n <= 200; ++n)
while语句
1 2 3 4 5 6 7 8 9 10 11
int main (int argc, char * argv[]) { @autoreleasepool { int count = 1; while ( count <= 5 ) { NSLog (@"%i", count); ++count; } } return 0; }
do语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14
int main (int argc, char * argv[]) { @autoreleasepool { int number, right_digit; NSLog (@"Enter your number."); scanf ("%i", &number); do { right_digit = number % 10; NSLog (@"%i", right_digit); number /= 10; } while ( number != 0 ); } return 0; }