×665. Non-decreasing Array(Medium)

该博客探讨了一道编程题目,涉及C++语言。主要内容是检查一个整数数组是否能在最多修改一个元素后变得非递减。解题策略是遍历数组,当发现不满足条件的元素时,进行修改并记录修改次数。如果修改次数超过一次,则返回false,否则返回true。博客中提到作者最初遇到理解题目要求的困扰,但通过分析找到了解决方案。
题目描述

解题思路:想着最多修改一次,就遍历修改,遇见不符合条件的有两种情况,1、修改前数2、修改后数。我无法判断修改条件,最后还是看了题解。

class Solution {
public:
    bool checkPossibility(vector<int>& nums) {
        int cnt = 0;
        for(int i = 0; i < nums.size()-1; ++i){
            if(nums[i]>nums[i+1]){
                cnt++;
                if(cnt == 2) return false;
                if(i > 0 && nums[i+1] < nums[i-1]){//修改条件
                    nums[i+1] = nums[i];
                }
            }
        }
        return true;
    }
};

在这里插入图片描述

create_surface_model (Operator) Name create_surface_model — Create the data structure needed to perform surface-based matching. Signature create_surface_model( : : ObjectModel3D, RelSamplingDistance, GenParamName, GenParamValue : SurfaceModelID) Description The operator create_surface_model creates a model for surface-based matching for the 3D object model ObjectModel3D. The 3D object model can, for example, have been read previously from a file by using read_object_model_3d, or been created by using xyz_to_object_model_3d. The created surface model is returned in SurfaceModelID. Additional parameters of the surface model can be set with set_surface_model_param after the model was created. The creation of the surface model requires that the 3D object model contains points and normals. The following combinations are possible: points and point normals; points and a triangular or polygon mesh, e.g., from a CAD file; points and a 2D-Mapping, e.g., an XYZ image triple converted with xyz_to_object_model_3d. Note that the direction and orientation (inward or outward) of the normals of the model are important for matching. For edge-supported surface-based matching the normals need to point inwards and further the model must contain a triangular or polygon mesh (see below). The surface model is created by sampling the 3D object model with a certain distance. The sampling distance must be specified in the parameter RelSamplingDistance and is parametrized relative to the diameter of the axis-parallel bounding box of the 3D object model. For example, if RelSamplingDistance is set to 0.05 and the diameter of ObjectModel3D is 10 cm, the points sampled from the object's surface will be approximately 5 mm apart. The sampled points are used for the approximate matching in the operator find_surface_model (see below). The sampled points can be obtained with the operator get_surface_model_param using the value 'sampled_model'. Note that outlier points in the object model should be avoided, as they would corrupt the diameter. Reducing RelSamplingDistance leads to more points, and in turn to a more stable but slower matching. Increasing RelSamplingDistance leads to less points, and in turn to a less stable but faster matching. ( 1) ( 2) ( 3) ( 4) (1) Original 3D model. (2) 3D model sampled with RelSamplingDistance = 0.02. (3) RelSamplingDistance = 0.03. (4) RelSamplingDistance = 0.05. The sampled points are used for finding the object model in a scene by using the operator find_surface_model. For this, all possible pairs of points from the point set are examined, and the distance and relative surface orientation of each pair is computed. Both values are discretized and stored for matching. The generic parameters 'feat_step_size_rel' and 'feat_angle_resolution' can be used to set the discretization of the distance and the orientation angles, respectively (see below). The 3D object model is sampled a second time for the pose refinement. The second sampling is done with a smaller sampling distance, leading to more points. The generic parameter 'pose_ref_rel_sampling_distance' sets the sampling distance relative to the object's diameter. Decreasing the value results in a more accurate pose refinement but a larger model and a slower model generation and matching. Increasing the value leads to a less accurate pose refinement but a smaller model and faster model generation and matching (see below). Surface-based matching can additionally use 3D edges to improve the alignment. This is particularly helpful for objects that are planar or contain larger planar sides, such that they are found in incorrect rotations or in a background plane. In order to allow find_surface_model to also align edges, the surface model must be trained by setting the generic parameter 'train_3d_edges' to 'true'. In this case, the model must contain a triangular or polygon mesh where the order of the points results in normals that point inwards. Also, the training for edge-supported surface-based matching requires OpenGL 2.1, GLSL 1.2, and the OpenGL extensions GL_EXT_framebuffer_object and GL_EXT_framebuffer_blit. Note that the training can take significantly longer than without edge-support. Additionally, the model can be prepared to support view-based score computation. This is particularly helpful for models where only a small part of the 3D object model is visible, which results in low scores if the ratio to the total number of points is used. Accordingly, the view-based score is computed using the ratio of the matched points to the maximum number of potentially visible model points from a certain viewpoint. In order to allow find_surface_model to compute a view-based score, the surface model must be trained by setting the generic parameter 'train_view_based' to 'true'. Similar to 'train_3d_edges', the model must contain a triangular or polygon mesh where the order of the points results in normals that point inwards. Note that using noisy data for the creation of your 3D object model results in the computation of deficient surface normals. Especially when the model is prepared for the use with 3D edges or the support of view-based score, this can lead to unreliable scores. In order to reduce noisy 3D data you can, e.g., use smooth_object_model_3d or simplify_object_model_3d. The generic parameter pair GenParamName and GenParamValue are used to set additional parameters for the model generation. GenParamName contains the tuple of parameter names that shall be set and GenParamValue contains the corresponding values. The following values are possible for GenParamName: 'model_invert_normals': Invert the orientation of the surface normals of the model. The normal orientation needs to be known for the model generation. If both the model and the scene are acquired with the same setup, the normals will already point in the same direction. If the model was loaded from a CAD file, the normals might point into the opposite direction. If you experience the effect that the model is found on the 'outside' of the scene surface and the model was created from a CAD file, try to set this parameter to 'true'. Also, make sure that the normals in the CAD file all point either outward or inward, i.e., are oriented consistently. The normal direction is irrelevant for the pose refinement of the surface model. Therefore, if the object model is only used with the operator refine_surface_model_pose, the value of 'model_invert_normals' has no effect on the result. List of values: 'false', 'true' Default: 'false' 'pose_ref_rel_sampling_distance': Set the sampling distance for the pose refinement relative to the object's diameter. Decreasing this value leads to a more accurate pose refinement but a larger model and slower model generation and refinement. Increasing the value leads to a less accurate pose refinement but a smaller model and faster model generation and matching. Suggested values: 0.05, 0.02, 0.01, 0.005 Default: 0.01 Restriction: 0 < 'pose_ref_rel_sampling_distance' < 1 'feat_step_size_rel': Set the discretization distance of the point pair distance relative to the object's diameter. This value defaults to the value of RelSamplingDistance. It is not recommended to change this value. For very noisy scenes, the value can be increased to improve the robustness of the matching against noisy points. Suggested values: 0.1, 0.05, 0.03 Default: Value of RelSamplingDistance Restriction: 0 < 'feat_step_size_rel' < 1 'feat_angle_resolution': Set the discretization of the point pair orientation as the number of subdivisions of the angle. It is recommended to not change this value. Increasing the value increases the precision of the matching but decreases the robustness against incorrect normal directions. Decreasing the value decreases the precision of the matching but increases the robustness against incorrect normal directions. For very noisy scenes where the normal directions can not be computed accurately, the value can be set to 25 or 20. Suggested values: 20, 25, 30 Default: 30 Restriction: 'feat_angle_resolution' > 1 'train_3d_edges': Enable the training for edge-supported surface-based matching and refinement. In this case the model must contain a mesh, i.e. triangles or polygons. Also, it is important that the computed normal vectors point inwards. This parameter requires OpenGL. List of values: 'false', 'true' Default: 'false' 'train_view_based': Enable the training for view-based score computation for surface-based matching and refinement. In this case the model must contain a mesh, i.e. triangles or polygons. Also, it is important that the computed normal vectors point inwards. This parameter requires OpenGL. List of values: 'false', 'true' Default: 'false' 'train_self_similar_poses': Prepares the surface model for optimizations regarding self-similar, almost symmetric poses. For this, poses are found under which the model is very similar to itself, i.e., poses that can be distinguished only by very small properties of the model (such as boreholes) and that can be confused by find_surface_model. When calling find_surface_model, it will automatically be determined which of those self-similar poses are correct. List of values: 'false', 'true' Default: 'false' Execution Information Multithreading type: reentrant (runs in parallel with non-exclusive operators). Multithreading scope: global (may be called from any thread). Automatically parallelized on internal data level. This operator returns a handle. Note that the state of an instance of this handle type may be changed by specific operators even though the handle is used as an input parameter by those operators. This operator supports canceling timeouts and interrupts. Parameters ObjectModel3D (input_control) object_model_3d → (handle) Handle of the 3D object model. RelSamplingDistance (input_control) real → (real) Sampling distance relative to the object's diameter Default: 0.03 Suggested values: 0.1, 0.05, 0.03, 0.02, 0.01 Restriction: 0 < RelSamplingDistance < 1 GenParamName (input_control) attribute.name(-array)(string) Names of the generic parameters. Default: [] Suggested values: 'model_invert_normals', 'pose_ref_rel_sampling_distance', 'feat_step_size_rel', 'feat_angle_resolution', 'train_3d_edges', 'train_view_based', 'train_self_similar_poses' GenParamValue (input_control) attribute.value(-array)(string / real / integer) Values of the generic parameters. Default: [] Suggested values: 0, 1, 'true', 'false', 0.005, 0.01, 0.02, 0.05, 0.1 SurfaceModelID (output_control) surface_model → (handle) Handle of the surface model.
09-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值