969、煎饼排序


思路:类冒泡排序(冒泡排序是每一次排序都将最大的数字放在最后一位,最大的数字放在最后之后就不再参加下一趟的大小比较了)每次找到最大值,进行0~maxValueIndex翻转,再将数组全部进行翻转,就将最大值放在数组最后一位了

class Solution {
public List<Integer> pancakeSort(int[] arr) {
List<Integer> res = new ArrayList<>();
int len = arr.length;
// 反转子数组 arr[0...k-1] ,所以要把最大值先搞到最后
while (len > 1) {
int maxValIndex = findMaxValIndex(arr, len);
// 最大值的索引不在最后
if (maxValIndex != len - 1) {
reverseArr(arr, 0, maxValIndex);
res.add(maxValIndex + 1);
reverseArr(arr, 0, len - 1);
res.add(len);
}
len--;
}
return res;
}
//找到最大值的索引位置
public int findMaxValIndex(int[] arr, int len) {
int res = 0;
for (int i = 0; i <len; i++) {
if (arr[i] > arr[res]) {
res = i;
}
}
return res;
}
//利用数组索引进行翻转
public void reverseArr(int[] arr, int left, int right) {
while (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
}
}
717、1比特与2比特字符

从起点开始遍历,当遇到1时,这个1一定会和下一个数组合起来,因此这时需要跳过下一个。如果能遍历到最后一个0,就说明成功了。
class Solution {
public boolean isOneBitCharacter(int[] bits) {
int n = bits.length, i = 0;
while (i < n - 1) {
if (bits[i] == 0) i++;
else i += 2;
}
return i == n - 1;
}
}
煎饼排序与1比特字符解析
本文介绍了煎饼排序的实现原理,通过类冒泡排序的方式,每次找到最大值并将其放置到正确的位置,逐步完成排序。同时,还解析了1比特字符问题的解决策略,通过遍历数组判断1的分布情况来确定是否为有效的一比特字符。

被折叠的 条评论
为什么被折叠?



