91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

leetcode旋轉數組問題怎么解決

發布時間:2022-02-24 17:32:43 來源:億速云 閱讀:302 作者:iii 欄目:開發技術

本篇內容介紹了“leetcode旋轉數組問題怎么解決”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

解題思路

暴力法每次旋轉1個位置, 旋轉k次即為正確答案。

旋轉的時候也是利用前驅結點來實現的, 前驅結點的更新也借助temp變量。

這里重點體會如何完成向后移動一次目前階段遇到題目不要鉆牛角尖, 暴力法能解就暴力法。

代碼
class Solution {
    public void rotate(int[] nums, int k) {
        int previous;
		int temp;
		for (int i = 0; i < k; i++) {
			previous = nums[nums.length-1];  //前驅結點初始為最后一個結點
			for (int j = 0; j < nums.length; j++) {
				temp = nums[j]; //先保存當前結點
				nums[j]=previous;
				previous=temp; //更新前驅結點
			}
		}
    }
}

反轉法 很實用

這個方法基于這個事實:當我們旋轉數組 k 次,k%n 個尾部元素會被移動到頭部, 剩下的元素依次向后移動。

1、反轉可以把k%n個元素先放到前面,只需要對數組進行 0到k-1范圍內的反轉就可以得到想要的順序;

2、反轉剩下的k-1到n-1個元素即實現了元素依次后移;

3、前往要主義此處的k有可能超出數組長度,而如果恰等于數組長度就等于沒變所以k=k%n。

class Solution {
    public void rotate(int[] nums, int k) {
		int n = nums.length;  
        k %= n; //k可能會查過數組長度造成錯誤
		//1、反轉數組
		reverse(nums,0,n-1);
        //2、前k個反轉,后n-k個反轉
		reverse(nums,0,k-1);
		reverse(nums,k,n-1);
    }
    //反轉數組 用這種寫法可以方便的反轉任意區間的數組 也很使用
	public void reverse(int[] nums, int start, int end) {
        while (start < end) {
            int temp = nums[start];
            nums[start] = nums[end];
            nums[end] = temp;
            start++;
            end--;
        }
    }
}

環狀替換

想到了但是代碼實現的時候遇到了當 n%k==0的時候死循環而想不到解決的辦法。

以下是leetcode提供的代碼,巧妙的用了雙循環循環解決了我不能解決的尷尬,核心代碼都是一樣的,外循環的此時必定是數組長度。

用count來控制外循環次數,內循環一鏡到底都是我沒有想到的。在編碼方面還有很大提高。

public class Solution {
    public void rotate(int[] nums, int k) {
        k = k % nums.length;
        int count = 0;
        for (int start = 0; count < nums.length; start++) {
            int current = start;
            int prev = nums[start];
            do {
                int next = (current + k) % nums.length;
                int temp = nums[next];
                nums[next] = prev;
                prev = temp;
                current = next;
                count++;
            } while (start != current);
        }
    }
}

“leetcode旋轉數組問題怎么解決”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广南县| 杭锦旗| 贵德县| 枣庄市| 乌兰浩特市| 墨脱县| 嵩明县| 雅江县| 赣州市| 澎湖县| 攀枝花市| 汝阳县| 依兰县| 锦州市| 白朗县| 连平县| 大荔县| 虞城县| 广南县| 天镇县| 苍梧县| 开原市| 监利县| 泸州市| 正蓝旗| 庐江县| 青岛市| 邳州市| 龙海市| 进贤县| 封丘县| 滁州市| 黄山市| 新竹市| 渭源县| 东源县| 京山县| 紫云| 自贡市| 辽宁省| 重庆市|