leetcode-665-Non-decreasing Array

題目描述:

Given an array with?n?integers, your task is to check if it could become non-decreasing by modifying?at most?1?element.

We define an array is non-decreasing if?array[i] <= array[i + 1]?holds for every?i?(1 <= i < n).

Example 1:

Input: [4,2,3]
Output: True
Explanation: You could modify the first 4 to 1 to get a non-decreasing array.

?

Example 2:

Input: [4,2,1]
Output: False
Explanation: You can't get a non-decreasing array by modify at most one element.

?

Note:?The?n?belongs to [1, 10,000].

?

要完成的函數:

bool checkPossibility(vector<int>& nums)?

?

說明:

1、這道題目給定一個vector,要判斷這個vector至多改變一個元素的值之后,是不是變成了非減序列。

首先筆者想的是,比如序列[1,4,2,3],這個序列改變4的值也就可以了,這樣子的序列中間必然會有一個凸起,4就是這個凸起。

那我們可以先找到這個凸起,從前往后找跟從后往前找,如果只有一個凸起的話,那么就接著判斷,如果有多個凸起,那么必定不能只改一個元素。

部分代碼如下:

        int s1=nums.size();int i=0,j=s1-1;while(i<s1-1){if(nums[i]<=nums[i+1])i++;elsebreak;}if(i==j)//當整個序列非降序排列return true;while(j>i){if(nums[j]>=nums[j-1])j--;elsebreak;}if((j-1)!=i)//如果中間有多個元素return false;    

這樣子就記錄了i和j的值。

?

2、當確實只有一個凸起時,我們進行下一步判斷。

還是以上面提到的序列為例子,[1,4,2,3],i=1,j=2,這個凸起的形成是由于nums[i]>nums[j],那我們可以改i這一位的值,也可以改j這一位的值,使得nums[i]<=nums[j]。

怎么判斷什么時候要改i的值,什么時候要改j的值?

?

比如[3,4,2,5],i=1,j=2,這時候由于nums[i]的前一位3,大于nums[j]=2,所以我們只能修改j這一位的值,而不能修改i這一位的值。

那如果nums[i]的值,還是比nums[j]的下一位大呢,這時候我們就算修改j這一位的值,修改完也不能形成非減序列,這時候就要返回false。

如果nums[i]的值,小于等于nums[j]的下一位,那這時候就要返回true了。

?

還有另一種情況,如果nums[i]的前一位,小于等于nums[j],比如上面提到的[1,4,2,3],i=1,j=2,那這時候我們就可以修改i的值了,直接返回true即可。

代碼如下:

        if(i!=0){if(nums[i-1]>nums[j])//只能改j這一位
            {if(j==s1-1)return true;if(nums[i]>nums[j+1])return false;return true;}elsereturn true;}return true;//如果i==0,那么直接修改nums[i]的值就可以了

上述代碼雖然考慮的過程繁瑣了點,但是實測38ms,beats 86.96% of cpp submissions,效果還是可以的。

?

3、附上完整代碼,分享給大家,如下:

    bool checkPossibility(vector<int>& nums) {int s1=nums.size();int i=0,j=s1-1;while(i<s1-1){if(nums[i]<=nums[i+1])i++;elsebreak;}if(i==j)return true;while(j>i){if(nums[j]>=nums[j-1])j--;elsebreak;}if((j-1)!=i)return false;if(i!=0){if(nums[i-1]>nums[j])//只能改j這一位
            {if(j==s1-1)return true;if(nums[i]>nums[j+1])return false;return true;}elsereturn true;}return true; }

?

轉載于:https://www.cnblogs.com/chenjx85/p/9024231.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254622.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254622.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254622.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

halcon 3D Object Model 三維物體模型算子,持續更新

目錄3D Object Model 三維物體模型Creation創建1.clear_object_model_3d2.copy_object_model_3d3. deserialize_object_model_3d4. gen_box_object_model_3d5. gen_cylinder_object_model_3d6. gen_empty_object_model_3d7. gen_object_model_3d_from_points8. gen_plane_objec…

linux下kafka與zookeeper集群部署

*********************************配置主機名&#xff0c;通過主機名連接機器********************************* 比如說&#xff0c;已經有了三臺主機 1&#xff0c;在linux上設置hostname&#xff0c;通過hostname來訪問linux虛擬機 1.1. 修改hosts文件 vim /etc/hosts#/etc…

調用Xvid編碼器流程(基于xvid1.1.0)

xvid有兩種編碼方式&#xff1a;single pass和twopass single pass模式編碼簡單&#xff0c;速度也快&#xff0c;但最終效果不如twopass。 twopass就是視頻壓制需要經過兩次編碼&#xff0c;分別為twopass&#xff0d;1st pass&#xff08;簡稱1pass&#xff09;和twopass…

關于box-shadow屬性的一點心得

一般我用到box-shadow都是用于諸如按鈕&#xff0c;文本塊&#xff0c;某些圖標&#xff0c;css類似為: box-shadow: 1px 1px 5px rgba(0, 0, 0, .8);這樣&#xff0c;樣式看上去會更加柔和&#xff0c;或者增加了立體感。 我個人的理解上&#xff0c;box-shadow的本質就是本體…

Laravel核心解讀--控制器

控制器 控制器能夠將相關的請求處理邏輯組成一個單獨的類&#xff0c; 通過前面的路由和中間件兩個章節我們多次強調Laravel應用的請求在進入應用后首現會通過Http Kernel里定義的基本中間件 protected $middleware [\Illuminate\Foundation\Http\Middleware\CheckForMaintena…

C#枚舉、值、字符串的相互轉換

目錄枚舉的定義使用方式優點代碼示例枚舉的定義 枚舉是整數類型&#xff0c;用戶自定義的整數類型的一個集合。 使用方式 public enum A {a0,b1,c2 }注意&#xff1a;枚舉定義的不同變量之間要用“&#xff0c;”分割&#xff0c;結尾不需要加上“&#xff0c;” 優點 可以…

制作404頁面的重要性

在網站的運行過程中會面臨很多問題&#xff0c;當用戶搜索頁面時&#xff0c;會提示服務器出錯&#xff0c;請求的頁面不存在&#xff0c;程序配置錯誤等問題。用戶請求瀏覽網頁碰到這些的情況時&#xff0c;會自動跳出系統默認的錯誤提示&#xff0c;對用戶體驗造成不好的感觸…

明晰C++內存分配的五種方法的區別

在C中&#xff0c;內存分成5個區&#xff0c;他們分別是堆、棧、自由存儲區、全局/靜態存儲區和常量存儲區。 棧&#xff0c;就是那些由編譯器在需要的時候分配&#xff0c;在不需要的時候自動清楚的變量的存儲區。里面的變量通常是局部變量、函數參數等。 堆&#xff0c;就是那…

【BZOJ-4631】踩氣球 線段樹 + STL

4631: 踩氣球 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 224 Solved: 114[Submit][Status][Discuss]Description 六一兒童節到了&#xff0c; SHUXK 被迫陪著M個熊孩子玩一個無聊的游戲&#xff1a;有N個盒子從左到右排成一排&#xff0c;第i個盒子里裝著Ai個氣球。SH…

3D Reconstruction三維重建halcon算子,持續更新

目錄3D Reconstruction三維重建Binocular Stereo雙目立體binocular_disparitybinocular_disparity_mgbinocular_disparity_msbinocular_distancebinocular_distance_mgbinocular_distance_msdisparity_image_to_xyzdisparity_to_distancedisparity_to_point_3ddistance_to_disp…

遺傳算法初級

遺傳算法是一種基于仿生學的計算機算法&#xff0c;通過模擬自然進化和優勝劣汰法則來搜索問題的最優解(我會說這其實就是稍微改良了一下的暴搜&#xff1f;) 它是由美國的J.Holland于1975年提出來的玄學概率學混合暴力搜索方法&#xff0c;廣泛適用于尋找算法優解、機器學習、…

C++ vector容器類型

vector類為內置數組提供了一種替代表示&#xff0c;與string類一樣 vector 類是隨標準 C引入的標準庫的一部分 &#xff0c;為了使用vector 我們必須包含相關的頭文件 &#xff1a;#include <vector> 使用vector有兩種不同的形式&#xff0c;即所謂的數組習慣和 STL習慣…

redis在linux命令行下連續進行命令操作

redis-cli -a password -n 9 keys "friend*" -a 是auth -n 是選擇數據池 keys就是找key啦、 要是后面再跟上 xargs */redis-cli del redis-cli -a password -n 9 keys "friend*" | xargs redis-cli -a password -n 9 del 就完美了23333 轉載于:https://www…

Calibration校準halcon算子,持續更新

目錄Calibration校準Binocular雙目相機binocular_calibrationCalibration Object 校準物體caltab_pointscreate_caltabdisp_caltabfind_calib_objectfind_caltabfind_marks_and_posegen_caltabsim_caltabCamera parameter相機參數cam_mat_to_cam_parcam_par_to_cam_matdeserial…

javascript:正則表達式、一個表單驗證的例子

閱讀目錄 本文內容&#xff1a;正則表達式&#xff1a;利用正則表達式進行表單驗證的例子&#xff1a;回到頂部本文內容&#xff1a; 正則表達式正則表達式的使用方法正則表達式的特殊匹配字符正則表達式修飾符利用正則表達式進行表單驗證的例子首發日期&#xff1a;2018-05-13…

Spring_01 spring容器、控制反轉(IOC)、依賴注入(DI)

目錄 1 什么是spring框架 2 spring框架的特點 3 spring容器 3.1 什么是spring容器 3.2 spring容器創建對象的編程步驟 3.4 spring容器創建對象的方式 3.5 bean元素的幾個重要屬性 4 IOC 4.1 什么是IOC 4.2 什么事DI 4.3 DI的三種方式 1 什么是spring框架 是一個開源的用來簡化企…

EntityFramework 插件之EntityFramework.Extended (批量處理)

接手了一個用EF來做的項目&#xff0c;由于項目中使用的原生處理&#xff0c;導致很多update都是采用先select 后 update的方式來實現&#xff0c;同時無法批量執行邏輯如&#xff1a;根據訂單類型統一更新狀態等。所以在經過了N多查找之后 發現了一個國外寫的擴展插件EntityFr…

一個傳值的問題”*”與”*”

1/********************************************************* 2* Desc:參數傳遞&#xff1a;使用引用傳遞指針和直接傳遞指針地址的區別 3* Author:charley 4* DateTime:2010-12-7 11:00 02***********************************************************/ 03#include <…

Classification分類halcon算子,持續更新

目錄ClassificationGaussian Mixture Models高斯混合模型add_class_train_data_gmmadd_sample_class_gmmclassify_class_gmmclear_class_gmmclear_samples_class_gmmcreate_class_gmmdeserialize_class_gmmevaluate_class_gmmget_class_train_data_gmmget_params_class_gmmget_…

spring boot 擴展之AutoConfigurationImportListener

最近閱讀spring boot源碼時發現&#xff0c;發現當spring使用ConfigurationClassParser加載使用Configuration注解類后&#xff0c;會使用AutoConfigurationImportSelector對加載的 Configuration注解的類進行一次過濾。當AutoConfigurationImportSelector過濾完成后會自動加載…