cuốn sách gpt4 ai đã làm

thuật toán - [Phỏng vấn] Tìm giá trị lớn nhất có thể lập được bằng cách sắp xếp bất kỳ số nguyên dương nào

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 03:09:41 27 4
mua khóa gpt4 Nike

Cho một mảng các số nguyên dương, hãy tìm giá trị lớn nhất có thể được hình thành bởi bất kỳ hoán vị nào của mảng đó. Tôi tự hỏi liệu có cấu trúc dữ liệu tốt hơn có thể cung cấp giải pháp tinh tế hơn cho vấn đề hay không.

nhập java.util.ArrayList;
nhập java.util.Collections;
nhập java.util.List;
nhập java.util.Map;
nhập java.util.TreeMap;


lớp công khai FindMaximumNumbersFromPermutation {


lớp tĩnh DS triển khai Comparable {

int intAtI;
Số nguyên[] thực tếInt;

DS công khai(int intAtI, Integer[]factInt) {
super();
this.intAtI = intAtI;
this.actualInt =actualInt;
}

@Ghi đè
int công khai so sánhTo(DS o) {
if(intAtI < o.intAtI)
return 1;
khác nếu(intAtI == o.intAtI)
return 0;
ngược lại trả về -1;
}

@Ghi đè
Chuỗi công khai toString() {
Chuỗi s="";
for(int i=0;i<>
s= s+actualInt[i];
trả lại s;
}
}

public static void main(String[] args)
{
int[] mảng = {21,9,23};

List list = new ArrayList();
int maxLength= 0;
for(int i=0;i<>
{
Số nguyên[] chữ sốArray = getDigitsArray(arr[i]);
if(digitsArray.length > maxLength)
maxLength = signatureArray.length;
list.add(digitsArray);
}


Danh sách đầu ra = new ArrayList();
for(int currentLength=0;currentLength<=maxLength;currentLength++)
doWork(danh sách, đầu ra, currentLength);

for(int i=0;i<>
{
Số nguyên[] temp = out.get(i);
for(int j=0;j<>
{
System.out.print(temp[j]);
}
}

}

riêng tư tĩnh void doWork(List list, List đầu ra,
int currentLength) {
Danh sách dsList = new ArrayList();

for(int i=0;i<>
{
Số nguyên[] temp = list.get(i);
if(temp.length>currentLength)
{
dsList.add(DS mới(temp[currentLength],temp));
}
}

Collections.sort(dsList);
Map<>> map = new TreeMap<>>();

for(int i=0;i<>
{
DS ds = dsList.get(i);
if(!map.containsKey(ds.intAtI))
{
List l = new ArrayList();
l.add(ds.actualInt);
map.put(ds.intAtI, l);
}
khác
{
List l = map.get(ds.intAtI);
l.add(ds.actualInt);
map.put(ds.intAtI, l);
}
}

Phím ArrayList = new ArrayList(map.keySet());
for(int i=keys.size()-1;i>=0;i--)
{
Khóa số nguyên = key.get(i);
List l = map.get(key);
if(l.size() ==1)
đầu ra.add(l.get(0));
}


}

Số nguyên tĩnh[] getDigitsArray(int số nguyên)
{
Chuỗi s = số nguyên+"";
Số nguyên[] ret = Số nguyên mới[s.length()];
for(int i=0;i<>
{
ret[i] = Integer.parseInt(s.charAt(i)+"");
}

return ret;
}
}

câu trả lời hay nhất

IMHO trường hợp chung (dán các số nguyên không âm tùy ý, không nhất thiết phải là số) khá thú vị, ví dụ:

 [709, 8, 70, 71, 5, 7] -> 8771709705
[31, 34, 30, 3] -> 3433130
[334, 323, 30, 31, 3] -> 33433233130

Ý tưởng giống như những gì H2CO3 đã đề cập: sắp xếp mảng, nhưng cách triển khai (C#) thì khác

int tĩnh riêng So sánh(int x, int y) {
nếu(x==y)
return 0;

// Đây không phải là giải pháp tốt (để so sánh các ký tự), nhưng dễ thực hiện
Chuỗi Stx = x.ToString(CultureInfo.InvariantCulture);
Chuỗi Sty = y.ToString(CultureInfo.InvariantCulture);

int n = Stx.Length < Sty.Length ?

// So sánh từ điển chuẩn: 9 > 80, 293 > 2896, 9873 > 986, v.v.
vì (int i = 0; i < n; ++i)
if (Stx[i] > Sty[i])
return 1;
khác nếu (Stx[i] < Sty[i])
return -1;

// Trường hợp đặc biệt: ab <>= a?
// 70 < 7; 78 > 7 v.v.
if (Stx.Length > Sty.Length) {
for (int i = n; i < Stx.Length; ++i)
if (Stx[i - 1] > Stx[i])
return -1;
ngược lại nếu (Stx[i - 1] < Stx[i])
return 1;
}
khác {
for (int i = n; i < Sty.Length; ++i)
if (Sty[i - 1] > Sty[i])
return 1;
ngược lại nếu (Sty[i - 1] < Sty[i])
return -1;
}

return 0;
}

Sau đó

int[] data = new int[] { 709, 8, 70, 71, 5, 7 };
Array.Sort(dữ liệu, So sánh);

StringBuilder Sb = new StringBuilder();

for (int i = data.Length - 1; i >= 0; --i)
Sb.Append(data[i]);

// 8771709705
Kết quả chuỗi = Sb.ToString();

Về thuật toán - [Phỏng vấn] Để tìm giá trị tối đa có thể được hình thành bằng cách sắp xếp bất kỳ số nguyên dương nào, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/17363171/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress