LeetCode pivot++ vs pivot+1

Posted

技术标签:

【中文标题】LeetCode pivot++ vs pivot+1【英文标题】: 【发布时间】:2021-08-26 10:35:27 【问题描述】:

我在 LeetCode 上做二进制搜索问题。当我使用 pivot++ 或 pivot-- 时,自动评分器会显示“超出时间限制”,但如果我使用 pivot+1 或 pivot-1,它会接受解决方案。有谁知道为什么会发生这种情况?

p.s 问题表明我的解决方案必须具有 O(log n) 时间复杂度。

此代码不被接受:

class Solution 

    public int search(int[] nums, int target) 
        
        int left = 0;
        int right = nums.length - 1;
        int pivot = 0;
        
        while (left <= right) 
            pivot = left+(right-left)/2;
            if (nums[pivot] == target) return pivot;
            if (nums[pivot] > target) right = pivot--;
            else left = pivot++;
        
        return -1; 
    

此代码被接受:

class Solution 
    public int search(int[] nums, int target) 
        
        int left = 0;
        int right = nums.length - 1;
        int pivot = 0;
        
        while (left <= right) 
            pivot = left+(right-left)/2;
            if (nums[pivot] == target) return pivot;
            if (nums[pivot] > target) right = pivot-1;
            else left = pivot+1;
        
        return -1;   
    

【问题讨论】:

两者都返回pivot的值加1。但是pivot++修改pivotpivot+1不会改变@ 987654327@。这是您的代码所做的重大改变。 【参考方案1】:

另外,pivot++会先返回pivot的值再递增,pivot+1会返回递增后的值,如果使用++pivot会先递增pivot的值,然后返回新的递增值

【讨论】:

【参考方案2】:
int x = 5;

int y = x++; //assigns x to y and then increments x, so y = 5, x = 6;

int z = ++x; //increments x and then assigns its value to y, so y = 7, z = 7;

int e = z + 1; //adds 1 to z and assigns result to e, but doesn't change z, so e = 8, z = 7.

【讨论】:

以上是关于LeetCode pivot++ vs pivot+1的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode] Find Pivot Index

leetcode 724. Find Pivot Index

[LeetCode] 724. Find Pivot Index_Easy tag: Dynamic Programming

⭐️ LeetCode解题系列 ⭐️ 1179. 重新格式化部门表(Oracle Pivot 行转列函数)

⭐️ LeetCode解题系列 ⭐️ 1179. 重新格式化部门表(Oracle Pivot 行转列函数)

[LeetCode] 724.Find Pivot Index