arr[i] + arr[k] != 2*arr[j]

简介: 给定一个正整数M,请构造出一个长度为M的数组arr, 要求对于任意的i,j,k三个位置,如果i<j<k,都有arr[i] + arr[k] != 2*arr[j],返回构造出的arr(满足情况的一种)。

一、题目描述:


给定一个正整数M,请构造出一个长度为M的数组arr, 要求对于任意的i,j,k三个位置,如果i<j<k,都有arr[i] + arr[k] != 2*arr[j],返回构造出的arr(满足情况的一种)。


示例:

示例 1:

输入:1

输出:[1]


示例 2:

输入:3

输出:[1, 5, 2]


示例 3:

输入:5

输出:[ 1, 5, 3, 2, 6]


二、思路分析:


利用奇数偶数来举例。此题核心主要是列举一个满足 a + c != 2b的例子。

当长度为1时,直接返回任意一个数都满足情况。


当长度不为1时,我们可以将数组划分成两半,前半份为奇数,后半份为偶数。

长度为2时,arr = [1,2]。根据长度为1的扩展。分别为第一个奇数、第一个偶数。

长度为3时,arr = [1,3,2]。根据长度为2(3的一半)的扩展。第一个奇数、第二个奇数,第一个偶数。


长度为4时,arr = [1,3,2,4]。根据长度为2(4的一半)的扩展。第一个奇数、第二个奇数,第一个偶数、第二个偶数。


长度为5时,arr = [1, 5, 3, 2, 6]。根据长度为3(5的一半)的扩展。第一个奇数、第三个奇数、第二个奇数,第一个偶数、第三个偶数。

。。。

以此类推。

使用递归,利用上一个结果,求其结果。

网络异常,图片无法展示
|


三、AC 代码:


function makeNo(size) {
  if (size === 1) return [1]
  let halfSize = Math.floor((size + 1) / 2)
  console.log(halfSize);
  let base = makeNo(halfSize)
  let res = []
  let index = 0
  for (; index < halfSize; index++) {
    res[index] = base[index] * 2 - 1
  }
  console.log(res,index)
  for (let i = 0; index < size; index++, i++) {
    // 偶数
    res[index] = base[i] * 2
    console.log(base[i])
  }
  return res
}


四、总结:


此题只要满足情况即可,根据奇数偶数只是其中一种方法。


作者:ClyingDeng

链接:https://juejin.cn/post/6952773184533823496

来源:稀土掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

目录
相关文章
为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组
为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组
|
4月前
|
前端开发 JavaScript
前端数组遍历循环的资料,let arr = [‘pink‘,‘red‘,‘blue‘] for (let k in arr){console.log(k),console.log(arr[k])}
前端数组遍历循环的资料,let arr = [‘pink‘,‘red‘,‘blue‘] for (let k in arr){console.log(k),console.log(arr[k])}
数组从排1,2,3,4,5,冒泡排序的写法 .sort,升序写法 arr.sort(function (a,b){return a - b})
数组从排1,2,3,4,5,冒泡排序的写法 .sort,升序写法 arr.sort(function (a,b){return a - b})
|
6月前
|
编译器 C语言
为什么被调函数内部不能用 sizeof(arr) / size(arr[0]) 计算数组长度?
该文解答了一个关于C语言的疑问,涉及64位RedPandaDevc++编译器。示例代码展示了不能通过`sizeof(arr)/sizeof(arr[0])`在函数中计算数组长度的问题,因为`arr`在函数中作为指针传递,`sizeof(arr)`返回指针大小(可能是4或8字节),而非数组长度。因此,代码在函数内输出可能为2。而在`main()`函数中,`sizeof(arr)`会计算整个数组大小,正确返回数组长度。文章强调了数组名在不同上下文中的差异以及`sizeof`操作符的使用注意事项。
77 4
|
6月前
|
JavaScript
v-for=“item in arr“ 的理解
v-for=“item in arr“ 的理解
41 0
|
6月前
|
存储 算法 Java
实现一个函数 splice(int[] a, int b[], int n, int m) 将数组 b 插入到数组 a 的第 n 个位置上去,并将其后面的元素后移 m 个位置,同时更新数组 a 的长度
实现一个函数 splice(int[] a, int b[], int n, int m) 将数组 b 插入到数组 a 的第 n 个位置上去,并将其后面的元素后移 m 个位置,同时更新数组 a 的长度
40 0
|
索引
Array 数组
Array 数组
86 0
|
安全 编译器 C++
认识、使用C++vector和array
认识、使用C++vector和array
142 0
【C/C++ strlen(str)和str.length()和str.size()的区别】
strlenQ(str)和str.length()和str.size()都可以求字符串长度,返回字符串中字符的长度,不包括0'。其中str.length()和str.size()是同义词,返回同样的值。
【C/C++ strlen(str)和str.length()和str.size()的区别】
|
算法 Python
LeetCode 410. Split Array Largest Sum
给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。
144 0
LeetCode 410. Split Array Largest Sum