[算法]奇数下标都是奇数或偶数下标都是偶数

题目:

给定一个长度不小于2的数组arr,实现一个函数调整arr,要么使所有的偶数下标都是偶数,要么使所有的奇数下标都是奇数。

要求:时间复杂度为O(N),额外空间复杂度为O(1)。

程序:

	public static void modify(int[] arr) {
		if (arr == null || arr.length < 2) {
			return;
		}
		int even = 0;
		int odd = 1;
		int end = arr.length - 1;
		while (even <= end && odd <= end) {
			printArray(arr);
			if ((arr[end] & 1) == 0) {
				swap(arr, end, even);
				even += 2;
			} else {
				swap(arr, end, odd);
				odd += 2;
			}
		}
	}

	public static void swap(int[] arr, int index1, int index2) {
		int tmp = arr[index1];
		arr[index1] = arr[index2];
		arr[index2] = tmp;
	}

	public static void printArray(int[] arr) {
		for (int i = 0; i != arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
	}
时间: 2024-10-13 16:16:12

[算法]奇数下标都是奇数或偶数下标都是偶数的相关文章

在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边。

//在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边. // 例如: 当输入a = {8,4,1,6,7,4,9,6,4}, // a = {1,7,9,8,4,6,4,6,4}为一种满足条件的排序结果 using System; namespace SuanFa { class Program { //在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边. static void Main(string[] args) { int[]

LeetCode | 1374. Generate a String With Characters That Have Odd Counts生成每种字符都是奇数个的字符串【Python】

LeetCode 1374. Generate a String With Characters That Have Odd Counts生成每种字符都是奇数个的字符串[Easy][Python][字符串] Problem LeetCode Given an integer n, return a string with n characters such that each character in such string occurs an odd number of times. The

24、输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变.  思路:新建一个数组先把原数组中的奇数push进去再把偶数push进去,然后用新数组数据覆盖原数组即可 复杂度O(n),用空间换时间 class Solution { public:     void reOrderArray(vector<int> &array) {         vector<int&

spoj10606 数位dp (求出现的数字,所有偶数出现奇数次,所有奇数出现偶数次)

http://www.spoj.com/problems/BALNUM/ SPOJ Problem Set (classical) 10606. Balanced Numbers Problem code: BALNUM Balanced numbers have been used by mathematicians for centuries. A positive integer is considered a balanced number if: 1)      Every even 

黑马基础阶段测试题:定义一个int类型的数组,数组中元素为{5,7,3,9,4}。求出数组中的最小值,并判断最小值是否为偶数,如果是偶数则输出“最小值为偶数”,如果不是偶数则输出“最小值为奇数”。打印如下:

package com.swift; import java.util.Arrays; public class ArrayTest { public static void main(String[] args) { /* * 定义一个int类型的数组,数组中元素为{5,7,3,9,4}. * 求出数组中的最小值,并判断最小值是否为偶数,如果是偶数则输出"最小值为偶数",如果不是偶数则输出"最小值为奇数".打印如下 */ int arr[]= {5,7,3,9,4

战略不能在云端,必须要落地到产品(必须重视产品体验:凡是有缺陷的地方,都有改善的空间,都代表着创新的机会,都代表着可能存在市场机会)

在公司内部,我反对做评论家,创业者首先不要去做评论家.评论家站在高端,谈产业问题,谈格局,这个东西其实没意义.很多问题越抽象之后,说的话都是正确的废话.不管是大企业还是小企业,当面临挑战,面临转型的时候,需要放弃概念上的论证,放弃平台思维,放弃下很大一盘棋的想法,更应该将眼光聚焦在用户身上.具体一点,就是静下心来想一想,我要做的东西,或者我已经做的东西,它的用户是什么人?用户在使用我产品的时候,遇到什么问题?有哪些地方我做得不够好,还可以做得更好?凡是有缺陷的地方,都有改善的空间,都代表着创新的

练习1:将一个6*6数组的第一行,第六行,主对角线和副对角线上的元素都存1,其他元素都存成-1,不需使用初始化,尽量少使用循环

暂时只想到最简单的两层循环实现,留待后看,慢慢优化: 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int arr[6][6] = {0}; 6 7 for (int i = 0; i < 6; i++) 8 { 9 for (int j = 0; j < 6; j++) 10 { 11 if (i == 0 || i == 5) 12 { 13 arr[i][j] = 1; 14 } 15 else

循环赛日常表算法(N可为奇数和偶数)

一. 实验题目 设有n位选手参加网球循环赛,循环赛共进行n-1天,每位选手要与其他n-1位选手比赛一场,且每位选手每天必须比赛一场,不能轮空.试按此要求为比赛安排日程. 二.实验目的 1.深刻理解并掌握“分治算法”的设计思想: 2.提高应用“分治算法”设计技能: 3.理解这样一个观点:用递归方法编写的问题解决程序具有结构清晰,可读性强等优点,且递归算法的设计比非递归算法的设计往往要容易一些,所以当问题本身是递归定义的,或者问题所涉及到的数据结构是递归定义的,或者是问题的解决方法是递归形式的时候,

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

如果不考虑奇数和奇数,偶数和偶数之间的相对位置不变.那么只需要两个指针分别指向数组的头和尾,依次比较. 1. 如果头指针指向的数组位置为奇数,那么就判断尾指针指向的数组位置的奇偶性.如果是奇数,则头指针后移一个位置,如果是偶数,则尾指针前移一个位置. 2. 如果头指针指向的数组位置为偶数,那么就判断尾指针指向的数组位置的奇偶性.如果是奇数,则交换头尾指针指向的数组元素,如果是偶数,则尾指针前移一个位置. 代码如下: public class Q13_ReOrderArray { public s