ใน Java จะย้าย 0 ทั้งหมดไปยังจุดสิ้นสุดของ Array Preserving Order of an Array ได้อย่างไร? [2 วิธี]
เผยแพร่แล้ว: 2020-12-31![ใน Java จะย้าย 0 ทั้งหมดไปยังจุดสิ้นสุดของ Array Preserving Order of an Array ได้อย่างไร? [2 วิธี]](/uploads/article/578/Jg7tpgI3lsELLLkN.png)
ฉันเคยเล่นกับปัญหาในการ moving all 0's to end
ของอาร์เรย์ในการสัมภาษณ์ต่างๆ ในรูปแบบต่างๆ บางครั้งฉันขอให้ย้าย 0 ทั้งหมดไปที่ด้านหน้าของอาร์เรย์ เรียงลำดับอาร์เรย์โดยไม่มีโครงสร้างข้อมูลใดๆ เป็นต้น
ในบทช่วยสอนนี้ เราจะพูดถึงตัวอย่างง่ายๆ ของการย้าย 0 ทั้งหมดเพื่อสิ้นสุดการรักษาลำดับของอาร์เรย์ มีสองวิธี
แนวทาง-1)
ตรรกะการแบ่งพาร์ติชัน QuickSort จุดหมุนคืออะไร?
-
Pivot point
เป็นองค์ประกอบหลักใน Quick Sort Algorithm ดำเนินการและแบ่งพาร์ติชันคอลเลกชันรอบจุดหมุน - โดยจะจัดเรียงองค์ประกอบอาร์เรย์ที่ใหญ่กว่าเดือยที่อยู่ก่อนหน้า และองค์ประกอบที่ใหญ่กว่าเดือยจะอยู่ด้านหลัง
- ดำเนินการต่อผ่านลูปเพื่อจัดเรียงอาร์เรย์
ตรรกะนั้นง่ายมาก:
- วนซ้ำผ่านอาร์เรย์
- หาก array[i] ไม่เท่ากับ 0 ให้สลับกับดัชนีปัจจุบัน
- ถ้า array[i] == 0 ให้ข้าม loop
- ในกรณีของเรา
0 is a Pivot point
- ทุกครั้งที่เราพบ 0 ตัวนับจุดหมุนจะเพิ่มขึ้นและองค์ประกอบจะเคลื่อนที่ก่อนจุดหมุน
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
private static void approach1 ( int [ ] crunchifyData ) { // Move 0 to end of array int j = 0 ; for ( int i = 0 ; i < crunchifyData . length ; i ++ ) { if ( crunchifyData [ i ] ! = 0 ) { int temp = crunchifyData [ j ] ; crunchifyData [ j ] = crunchifyData [ i ] ; crunchifyData [ i ] = temp ; j ++ ; } } log ( "\n\nApproach-1 Result: " + Arrays . toString ( crunchifyData ) ) ; } |
แนวทาง-2)
- สร้างอาร์เรย์ใหม่ที่มีขนาดเท่ากัน
- วนซ้ำผ่าน Array และข้ามการเพิ่ม 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
private static void approach2 ( int [ ] crunchifyData ) { int [ ] num = new int [ crunchifyData . length ] ; int j = 0 ; for ( int i = 0 ; i < crunchifyData . length ; i ++ ) { if ( crunchifyData [ i ] ! = 0 ) { num [ i - j ] = crunchifyData [ i ] ; } else { j ++ ; } } System . out . print ( "\n\nApproach-2 Result: " + Arrays . toString ( num ) ) ; } |
นี่คือโปรแกรมที่สมบูรณ์:
CrunchifyMoveAll0ToEnd.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
package crunchify . com . java . tutorials ; import java . util . Arrays ; /** * @author Crunchify.com * Requirement: Move all 0's to end of array preserving order * Input array: 8 8 3 0 4 0 6 0 9 1 * Output array: 8 8 3 4 6 9 1 0 0 0 */ public class CrunchifyMoveAll0ToEnd { public static void main ( String [ ] args ) { int [ ] crunchifyData ; crunchifyData = new int [ ] { 8 , 8 , 3 , 0 , 4 , 0 , 6 , 0 , 9 , 1 } ; log ( "Original array: " + Arrays . toString ( crunchifyData ) ) ; if ( crunchifyData == null | | crunchifyData . length == 0 ) { log ( "Empty Array" ) ; } approach1 ( crunchifyData ) ; approach2 ( crunchifyData ) ; } private static void approach1 ( int [ ] crunchifyData ) { // Move 0 to end of array int j = 0 ; for ( int i = 0 ; i < crunchifyData . length ; i ++ ) { if ( crunchifyData [ i ] ! = 0 ) { int temp = crunchifyData [ j ] ; crunchifyData [ j ] = crunchifyData [ i ] ; crunchifyData [ i ] = temp ; j ++ ; } } log ( "\n\nApproach-1 Result: " + Arrays . toString ( crunchifyData ) ) ; } // Create a new array with same size // Iterate through an Array and skip adding 0 private static void approach2 ( int [ ] crunchifyData ) { int [ ] num = new int [ crunchifyData . length ] ; int j = 0 ; for ( int i = 0 ; i < crunchifyData . length ; i ++ ) { if ( crunchifyData [ i ] ! = 0 ) { num [ i - j ] = crunchifyData [ i ] ; } else { j ++ ; } } System . out . print ( "\n\nApproach-2 Result: " + Arrays . toString ( num ) ) ; } private static void log ( String string ) { System . out . print ( string + " " ) ; } } |
เอาต์พุตคอนโซล Eclipse:
1 2 3 4 5 6 |
Original array : [ 8 , 8 , 3 , 0 , 4 , 0 , 6 , 0 , 9 , 1 ] Approach - 1 Result : [ 8 , 8 , 3 , 4 , 6 , 9 , 1 , 0 , 0 , 0 ] Approach - 2 Result : [ 8 , 8 , 3 , 4 , 6 , 9 , 1 , 0 , 0 , 0 ] Process finished with exit code 0 |
แจ้งให้เราทราบหากคุณรู้วิธีที่ดีกว่าในการแก้ปัญหานี้ ฉันชอบที่จะได้ยินความคิดของคุณ
