乐信圣文
5进制的1023转换为10进制是多少?转换为7进制是多少?
计算过程:
1023(5) => 15^3 + 0 + 25^1 + 3*5^0 = 125+10+3= 138(10)
138(10) => 138/7= 19…5 19/7 = 2….5 2/7=0…..2
255(7) = 51+57+2*49= 40+98= 138(10)
答:5进制的1023转换为10进制是138。转换为7进制是255。
比较四种排序算法的时间复杂度,空间复杂度,稳定性,适用场景(插入,快排,归并,堆排)
| 排序算法 |
时间复杂度(平均) |
时间复杂度(最坏) |
空间复杂度 |
稳定性 |
| 插入排序 |
O(n²) |
O(n²) |
O(1) |
稳定 |
| 快速排序 |
O(nlogn) |
O(n²) |
O (logn)(递归栈) |
不稳定 |
| 归并排序 |
O(nlogn) |
O(nlogn) |
O (n)(辅助数组) |
稳定 |
| 堆排序 |
O(nlogn) |
O(nlogn) |
O(1) |
不稳定 |
- 插入排序:小规模数据、接近有序的数据、作为复杂排序算法的子过程(如快排的小规模子数组)。
- 快速排序:通用场景优先选择,如数据库排序、日常开发中的大部分排序需求。
- 归并排序:需要稳定排序的场景、外部排序(如超大文件排序)、对时间复杂度稳定性要求高的场景。
- 堆排序:内存受限的场景、嵌入式系统、无需稳定排序且追求空间效率的场景。
进程和线程的概念?它们的区别有哪些?
进程:是操作系统分配资源的最小单位。进程可以类比为工厂,其中包含地址空间和资源和执行任务的线程。
线程:是操作系统中执行CPU调度的最小单位。线程可以类比为工人,它可以使用进程内的资源和地址空间,负责执行进程分配的任务。
区别:
1、进程是完整的一套程序,包含自己的地址空间和资源。而线程是进程的一部分,一个进程可以有多个线程,并且这些线程共享进程的相关资源。
2、进程间隔离性强,并发安全,进程A崩溃不会影响进程B。而线程由于共享进程资源,所以进程A内的线程a崩溃会导致线程b也崩溃,所以存在并发不安全的问题。
3、进程间通信需要依赖管道、信号量、信号、消息队列、共享内存等机制。而线程间通信由于共享进程资源,所以较为容易。
分辨率为1024x1024的RGBA32格式图片的内存占用多少字节?
- 单像素字节数:RGBA32 格式中,R(红)、G(绿)、B(蓝)、A(透明度)各占 8 位(1 字节),因此每个像素占用 4 字节。
- 总像素数:1024 × 1024 = 1,048,576 像素。
- 总内存占用:总像素数 × 单像素字节数 = 1,048,576 × 4 = 4,194,304 字节(即 4MB,1MB = 1024×1024 字节)。
结论:该图片的内存占用为 4,194,304 字节(4MB)。
两个数组合并并去重
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
| using System; using System.Collections.Generic; using System.Linq;
public class ArrayMerger { public static int[] MergeAndRemoveDuplicates(int[] arr1, int[] arr2) { arr1 ??= Array.Empty<int>(); arr2 ??= Array.Empty<int>();
HashSet<int> uniqueSet = new HashSet<int>(arr1); foreach (int num in arr2) { uniqueSet.Add(num); }
return uniqueSet.ToArray(); } }
|
判断密码是否合法
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
| using System;
public class PasswordValidator { public static bool IsValidPassword(string password) { if (password == null || password.Length < 8 || password.Length > 16) { return false; }
bool hasLower = false; bool hasUpper = false; bool hasDigit = false;
foreach (char c in password) { if (char.IsLower(c)) { hasLower = true; } else if (char.IsUpper(c)) { hasUpper = true; } else if (char.IsDigit(c)) { hasDigit = true; } else { return false; } } int typeCount = 0; if (hasLower) typeCount++; if (hasUpper) typeCount++; if (hasDigit) typeCount++;
return typeCount >= 2; } }
|
扑克牌包含13*4张牌。洗牌,每次从牌堆顶抽牌,按照同种花色K->A(K在最上,A在最下)的顺序排列成4列。假设已洗好牌,编写代码将牌堆按照要求完成排列
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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
| using System; using System.Collections.Generic; using System.Linq;
public enum Suit { Spades, Hearts, Clubs, Diamonds }
public enum Rank { K = 13, Q = 12, J = 11, T10 = 10, T9 = 9, T8 = 8, T7 = 7, T6 = 6, T5 = 5, T4 = 4, T3 = 3, T2 = 2, A = 1 }
public class Card { public Suit Suit { get; } public Rank Rank { get; }
public Card(Suit suit, Rank rank) { Suit = suit; Rank = rank; }
public override string ToString() { string rankStr = Rank switch { Rank.A => "A", Rank.T2 => "2", Rank.T3 => "3", Rank.T4 => "4", Rank.T5 => "5", Rank.T6 => "6", Rank.T7 => "7", Rank.T8 => "8", Rank.T9 => "9", Rank.T10 => "10", Rank.J => "J", Rank.Q => "Q", Rank.K => "K", _ => throw new ArgumentOutOfRangeException() }; return $"{rankStr}({Suit})"; } } public class PokerArranger { public List<List<Card>> Arrange(Queue<Card> shuffledDeck) { var columns = new Dictionary<Suit, List<Card>> { { Suit.Spades, new List<Card>() }, { Suit.Hearts, new List<Card>() }, { Suit.Clubs, new List<Card>() }, { Suit.Diamonds, new List<Card>() } };
while (shuffledDeck.Count > 0) { Card currentCard = shuffledDeck.Dequeue(); List<Card> targetColumn = columns[currentCard.Suit];
targetColumn.Insert(0, currentCard); }
return new List<List<Card>> { columns[Suit.Spades], columns[Suit.Hearts], columns[Suit.Clubs], columns[Suit.Diamonds] }; } } public class Program { public static void Main() { var allCards = new List<Card>(); foreach (Suit suit in Enum.GetValues(typeof(Suit))) { foreach (Rank rank in Enum.GetValues(typeof(Rank))) { allCards.Add(new Card(suit, rank)); } } var rng = new Random(); var shuffledDeck = new Queue<Card>(allCards.OrderBy(c => rng.Next()));
var arranger = new PokerArranger(); var columns = arranger.Arrange(shuffledDeck);
for (int i = 0; i < columns.Count; i++) { Console.WriteLine($"第{i + 1}列({columns[i].First().Suit}):"); foreach (var card in columns[i]) { Console.WriteLine($" {card}"); } Console.WriteLine(); } } }
|
说明MonoBehavior中的关于生命周期的函数,关于使用时机进行排序
1
| Awake` → `OnEnable` → `Start` → (每帧循环:`FixedUpdate` → `Update` → `LateUpdate` → 碰撞 / 交互函数 → `OnGUI`) → `OnDisable` → `OnDestroy` → `OnApplicationQuit
|