第一行一个正整数 1 <= n <= 100000
第二行n个整数a1,a2,...,an,(1<=ai<=1e9)
如果存在,输出"true",否则输出"false"。(不含引号)。
5 12 8 36 9 20
true
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] arr = new int[n]; for(int i = 0;i <n;i++){ arr[i] = sc.nextInt(); } int first = arr[0]; int second = Integer.MAX_VALUE; boolean flg = false; for(int i = 1;i < n;i++){ if(arr[i] < first){ first = arr[i]; }else if(arr[i] > first && arr[i] < second){ second = arr[i]; }else if(arr[i] > first && arr[i] > second){ flg = true; break; } } if(flg){ System.out.println("true"); }else{ System.out.println("false"); } } }
// 动态规划 public boolean increasingTriplet(int[] nums) { if (nums == null || nums.length < 3) return false; int[] dp = new int[nums.length]; for (int i = 1; i < nums.length; i++) { for (int j = 0; j < i; j++) { if (nums[i] > nums[j]) { dp[i] = Math.max(dp[i], dp[j] + 1); } if (dp[i] > 1) return true; } } return false; } // 着眼于中间的那个值 public boolean increasingTriplet_2(int[] nums) { if (nums == null || nums.length < 3) { return false; } int min = Integer.MAX_VALUE; int mid = Integer.MAX_VALUE; for (int i = 0; i < nums.length; i++) { if (nums[i] <= min) { min = nums[i]; } else if (nums[i] <= mid) { mid = nums[i]; } else { return true; } } return false; }
//遍历数据,确定从起始点到该点的最小数据值、和左边拥有更小数据的第二小数据中的最小值 //min记录最小数据,second记录长度为2的递增的最小的第二个值,如果当前遍历的数据大于second则存在长度为三的递增 #include<iostream> using namespace std; int main() { int n; cin >> n; int tmp, min = 0, second = 0; cin >> min; while (cin >> tmp) { if (tmp > min) { second = tmp; break; } else if (tmp < min) { min = tmp; } } while (cin >> tmp) { if (tmp < min) { min = tmp; } else if (tmp > min) { if (tmp > second) { cout << "true"; system("pause"); return 0; } if (tmp < second) second = tmp; } } cout << "false"; system("pause"); return 0; }