4 条题解

  • 1
    @ 2024-4-6 15:18:50
    #include<bits/stdc++.h>
    using namespace std;
    int n,ans,sum;
    int main()
    {
        ans=0;//start
        cin>>n;
        int a=0;
        for (int i=0;i<=n;i++)
        {
            int b;
            cin>>b;
            if (a-b>0)
            {
                if (ans==0)
                {
                    sum++;
                }
                ans=1;//下坡为1
                
            }
            else if (a-b<0)
            {
                ans=0;//上坡为0
            }
            a=b;
        }
        cout<<sum-1;//减去最后的
        return 0;
    }
    

    一种更加简便的算法。 思路:一个爬山的人,下山后又上山,说明此处为“低洼地”

    我们记录状态ans,如果“下山”(1)后“上山”(0),说明此处为“低洼地” 最后,我们甚至不用数组就可以完成此题

    tips:空间复杂度与时间复杂度应该都是最小的

    • 0
      @ 2023-12-9 20:40:42
      #include<iostream>
      int a[10001];
      int main()
      {
          int n;
          std::cin>>n;
          for(int i=1;i<=n;i+=1)std::cin>>a[i];
          int sum=0;
          for(int i=1;i<=n;i+=1)
          {
              int l,r;
              l=r=i;
              while(r+1<=n&&a[r]==a[r+1])r+=1;
              if(a[l-1]>a[l]&&a[r+1]>a[r])sum+=1;
          }
          std::cout<<sum;
      }
      
      • 0
        @ 2023-11-10 12:51:25

        每个点,枚举各种情况判断

        #include<bits/stdc++.h>
        using namespace std;
        int a[10010];
        int ans=0;
        int main(){
        	int n;
        	cin>>n;
        	for(int i=1;i<=n;i++){
        		cin>>a[i];
        	}
        	bool flat=false;
        	for(int i=2;i<n;i++){
        		if(a[i]<a[i-1] && a[i]<a[i+1]){
        			ans++;
        			flat=false;
        		}
        		if(a[i]>a[i-1]){
        			flat=false;
        		}
        		else if(a[i]==a[i-1]){
        			flat=true;
        		}
        		if(flat && a[i]<a[i+1]){
        			ans++;
        		}
        	}
        	cout<<ans;
        	return 0;
        }
        
        • 0
          @ 2023-11-8 20:36:33
          #include <iostream>
          int main(){
              int n,a[10005],sum=0,l=0; std::cin>>n;
              for(int i=0;i<n;i++)std::cin>>a[i];
              for(int i=1;i<n;i++){
                  if(a[i]<a[i-1])l=1; 
                  else if(a[i]>a[i-1]&&l)sum++,l=0;}
              std::cout<<sum; return 0;}
          
          • 1

          信息

          ID
          538
          时间
          1000ms
          内存
          125MiB
          难度
          5
          标签
          递交数
          398
          已通过
          138
          上传者